Обнаружил 3 проблемы: 1. "Сортировка" в обеих UDF с числами работает не совсем верно (нужно, чтобы меньшее число оказывалось в начале "сцепки") 2. "Уникальность" в Concat2 не работает в режиме "Все" (нужны 2 алгоритма работы - если Delimiter отличается и совпадает с символом-разделителем в ячейках) 3. Ограничение Excel - не более 32 767 знаков в ячейке / примечании (нужно вместо сообщения об ошибке написать ХХХ знаков > 32 767)
Файл с примером прилагаю. Заранее огромное спасибо всем неравнодушным!
У вас очень удобно изложена проблема в файле. Не составило труда подправить. Числа не сортировались потому что они выгружались из словаря как текст и по правилам текста сортировались.
Про ошибку надо добавить после определения Concat
Код
If Len(Concat) > 32767 Then Concat = Len(Concat) & "> 32 767"
Не помню, что было с 1 по 11 января , но поднятие этой темы успешно пропустил. Leanna , спасибо, что так удачно подключились!
Подправил код версии 7, чтобы корректно сортировались числа и чтобы в результате учитывался разделитель при уникальности. В тестовой таблице показана корректная сортировка текста типа "1D9", которое VBA считает не текстом, а числом 1*10^9 (как и "1E9", между прочим).
Вообще-то, могут возникнуть следующие проблемы и неопределенности: 1. Бывает, что нужно сортировать все данные как текст, например, в результате последнего теста может быть логичным и такое: 1,1D9,2,Б 2. Не понятно, какой символ в числовом тексте считать разделителем целой и дробной части - точку или запятую. Сейчас это зависит от настроек операционной системы (запятая), а не параметра Еxcel (может быть и точка при системной запятой). И в разный локализациях Excel результат может быть разным. 3. Не понятно, считать ли текст "1E9" и "1D9" числом или лучше считать это текстом, как сейчас реализовано. 4. Сейчас в результате не учитывается формат числовых ячеек. 5. Не понятно, как учитывать в результате другие типы данных и их форматы: дата, время, логическое значение (протестируйте самостоятельно). И т.п., но лучше на всём этом не зацикливаться, чтобы не перегрузить функциональность, не потерять удобство и скорость обработки.
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.
Есть проблема со сцепкой диапазона 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
Большое спасибо. Нужно было склеивать данные столбцов в строки-ячейки.Передо мной база на 100.000 строк и по многим условиям. Немного подкорректировал и запустил. Результат идеальный.
ZVI, огромное Вам спасибо за эту превосходную функцию!!! Замечательная вещь!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Добрый день. у меня имеется реестр названий нарушений с датами, (2 столбца. нарушение - дата) Требуется сцепить даты с одного периода до другого периода включительно. как это реализовать?
Увидел тему, уже прикинул самую быструю реализацию UDF для Excel (не на VBA) по данной теме, сильно быстрее, чем любое здесь предложенное решение. Потом, посмотрел решения от ZVI, которые всегда для меня были эталоном в VBA и решил, пусть самым быстрым и останется.