Страницы: Пред. 1 2 3
RSS
Универсальная функция Сцепить, Быстрая UDF для сцепки любых данных по 3 критериям
 
Обнаружил 3 проблемы:
1. "Сортировка" в обеих UDF с числами работает не совсем верно
(нужно, чтобы меньшее число оказывалось в начале "сцепки")
2. "Уникальность" в Concat2 не работает в режиме "Все"
(нужны 2 алгоритма работы - если Delimiter отличается и совпадает с символом-разделителем в ячейках)
3. Ограничение Excel - не более 32 767 знаков в ячейке / примечании
(нужно вместо сообщения об ошибке написать ХХХ знаков > 32 767)

Файл с примером прилагаю.
Заранее огромное спасибо всем неравнодушным!
Изменено: Acid Burn - 05.02.2015 17:26:51
 
Попытался сам разобраться: потратил вчера вечер и сегодня часть дня, но результат отрицательный.
Уважаемые, очень нужна Ваша помощь!
 
У вас очень удобно изложена проблема в файле. Не составило труда подправить.
Числа не сортировались потому что они выгружались из словаря как текст и по правилам текста сортировались.

Про ошибку надо добавить после определения Concat
Код
If Len(Concat) > 32767 Then Concat = Len(Concat) & "> 32 767"
Работать надо не 12 часов, а головой.
 
Не помню, что было с 1 по 11 января     ;)  , но поднятие этой темы успешно пропустил.
Leanna , спасибо, что так удачно подключились!

Подправил код версии 7, чтобы корректно сортировались числа и чтобы в результате учитывался разделитель при уникальности.
В тестовой таблице показана корректная сортировка текста типа "1D9", которое VBA считает не текстом, а числом 1*10^9 (как и  "1E9", между прочим).

Вообще-то, могут возникнуть следующие проблемы и неопределенности:
1. Бывает, что нужно сортировать все данные как текст, например, в результате последнего теста может быть логичным и такое: 1,1D9,2,Б
2. Не понятно, какой символ в числовом тексте считать разделителем целой и дробной части - точку или запятую.
Сейчас это зависит от настроек операционной системы (запятая), а не параметра Еxcel (может быть и точка при системной запятой). И в разный локализациях Excel результат может быть разным.
3. Не понятно, считать ли текст "1E9" и "1D9" числом или лучше считать это текстом, как сейчас реализовано.
4. Сейчас в результате не учитывается формат числовых ячеек.
5. Не понятно, как учитывать в результате другие типы данных и их форматы: дата, время, логическое значение (протестируйте самостоятельно).
И т.п., но лучше на всём этом не зацикливаться, чтобы не перегрузить функциональность, не потерять удобство и скорость обработки.
Изменено: ZVI - 06.02.2015 06:47:01
 
Leanna, ZVI, огромное Вам спасибо!
Я уж думал никто не откликнется.

ZVI,
Ваша версия работает лучше: при сцепке (1+1D3+2+Б) (1,2,1D3,Б) правильнее, чем (1,2,1000,Б) у Leanna.
Буду знать, что 1D3 - это число в VB!

Комментарии по Вашим тезисам:
1,3). IMHO, (1,2,1D3,Б) логичнее, чем (1,1D3,2,Б). Жаль, что проверка, чего больше в диапазоне (текста или чисел ) ресурсоёмка.
2). Новые версии Excel, как и Concat, на сколько я понимаю, используют системный разделитель.
4). Задача сцепить набор Дата/Время вполне может попасться.
5). Простите, что значит "логическое значение" в данном контексте?

PS:
Leanna пишет "Про ошибку надо добавить после определения Concat"
Может быть, я что-то не так делаю, но в итоге Concat всё равно пишет #ЗНАЧ! вместо XXX > 32767.
Изменено: Acid Burn - 15.02.2015 17:55:11
 
Нужна помощь с очередной "сцепкой".
Опять застрял, хотя задача вроде бы не сложная...
Изменено: Acid Burn - 15.02.2015 17:57:54
 
Доброго времени всем!

Есть проблема со сцепкой диапазона A1:A8:
1;44;82;83;94;95;101;112;123;6010;6011
33;44;94;95;101;123;6010;6011
1;95;101;123;6010;6011
94;95;101;123;6010;6011
1;44;82;94;95;101;112;123;6010;6011
44;94;95;101;123;6010;6011
1;33;44;51;60;94;95;101;123
33;44;51;60;94;95;101;123

Пишу A10 =Concat(A1:A8;";";1;1)
Ожидаемый результат: 1;33;44;51;60;82;83;94;95;101;112;123;6010;6011
Полученный результат: #Err! Subscript out of range

В чём проблема?
 
Цитата
Acid Burn написал:В чём проблема?
Доброе утро!
Проблема связана с тем, что символ разделителя присутствует в данных.
Подправил код в приложенной 8-й версии и для таких случаев.
Изменено: ZVI - 15.05.2015 06:34:17
 
Спасибо Вам огромное!
 
Большое спасибо. Нужно было склеивать данные столбцов в строки-ячейки.Передо мной база на 100.000 строк и по многим условиям. Немного подкорректировал и запустил. Результат идеальный.  
 
Цитата
AMA3OH написал: Большое спасибо
Рад, что код используется и помогает, удачи Вам!
 
AMA3OH, а что значит "Немного подкорректировал"? Что Вы изменили?
 
ZVI, огромное Вам спасибо за эту превосходную функцию!!! Замечательная вещь!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Добрый день. у меня имеется реестр названий нарушений с датами, (2 столбца. нарушение - дата)
Требуется сцепить даты с одного периода до другого периода включительно. как это реализовать?
 
В отдельной теме, с файлом-примером
 
ZVI, спасибо Вам большое, за помощь!
 
Увидел тему, уже прикинул самую быструю реализацию UDF для Excel (не на VBA) по данной теме, сильно быстрее, чем любое здесь предложенное решение. Потом, посмотрел решения от ZVI, которые всегда для меня были эталоном в VBA и решил, пусть самым быстрым и останется.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: Пред. 1 2 3
Наверх