Каким образом можно "сцепить" записи по колонке номер 9 (см образец в прикрепленном файле). Обращаю особое внимание, что количество строк может быть произвольным, в конце суммирующей записи нет никаких знаков препинания, пробелов между записями нет.
Каким образом можно "сцепить" записи по колонке номер 9 (см образец в прикрепленном файле). Обращаю особое внимание, что количество строк может быть произвольным, в конце суммирующей записи нет никаких знаков препинания, пробелов между записями нет.Юрий_Нд
Но теперь-то вопрос не про комбинации! Название темы не отражает сути. Да и не сумма это, а сцепление текстов (значений ячеек) Связывать эту тему с прошлой не нужно - вопросы РАЗНЫЕ
Но теперь-то вопрос не про комбинации! Название темы не отражает сути. Да и не сумма это, а сцепление текстов (значений ячеек) Связывать эту тему с прошлой не нужно - вопросы РАЗНЫЕvikttur
Сообщение отредактировал vikttur - Вторник, 05.09.2017, 10:34
Function Sbor(d_ As Range, Optional del_ = ";") Application.Volatile If d_.Columns.Count <> 1 Then a_ = "Ссылка д.б. на ОДИН столбец" Else r0_ = d_(1).Row c_ = d_(1).Column r1_ = Cells(Rows.Count, c_).End(3).Row If r1_ < r0_ Then a_ = "Ниже ссылки данных нет" Else For i = r0_ To r1_ a_ = a_ & del_ & Cells(i, c_) Next i a_ = Mid(a_, Len(del_) + 1, Len(a_)) End If End If Sbor = a_ End Function
[/vba]
Функция пользователя [vba]
Код
Function Sbor(d_ As Range, Optional del_ = ";") Application.Volatile If d_.Columns.Count <> 1 Then a_ = "Ссылка д.б. на ОДИН столбец" Else r0_ = d_(1).Row c_ = d_(1).Column r1_ = Cells(Rows.Count, c_).End(3).Row If r1_ < r0_ Then a_ = "Ниже ссылки данных нет" Else For i = r0_ To r1_ a_ = a_ & del_ & Cells(i, c_) Next i a_ = Mid(a_, Len(del_) + 1, Len(a_)) End If End If Sbor = a_ End Function
_Boroda_, sboy, Я Вам очень благодарен за конкретную помощь. Простите, есть еще одна проблемка. В случае если какая-либо строчка пуста, выводится двойной знак препинания ";;". Как обойти такую проблемку? И ещё. Если я Вас ещё не до конца замучил своей тупостью, прошу добавить чуть больше комментариев в тело функции.
_Boroda_, sboy, Я Вам очень благодарен за конкретную помощь. Простите, есть еще одна проблемка. В случае если какая-либо строчка пуста, выводится двойной знак препинания ";;". Как обойти такую проблемку? И ещё. Если я Вас ещё не до конца замучил своей тупостью, прошу добавить чуть больше комментариев в тело функции.Юрий_Нд
Function Sbor(d_ As Range, Optional del_ = ";") Application.Volatile 'Автопересчет функции. Если их много, то убрать эту строку If d_.Columns.Count <> 1 Then 'если в ссылке d_ несколько столбцов a_ = "Ссылка д.б. на ОДИН столбец" Else 'иначе r0_ = d_(1).Row 'номер первой строки из ссылки c_ = d_(1).Column 'номер первого столбца из ссылки r1_ = Cells(Rows.Count, c_).End(3).Row 'номер последней заполненной строки с столбце с_ If r1_ < r0_ Then 'если r1<к0 a_ = "Ниже ссылки данных нет" Else 'иначе For i = r0_ To r1_ 'цикл от r0 до r1 If Cells(i, c_) <> "" Then 'если ячейка не пуста a_ = a_ & del_ & Cells(i, c_) 'приклеиваем к переменной а справа разделитель и значение ячейки End If ' Next i a_ = Mid(a_, Len(del_) + 1, Len(a_)) ' отрезаем от полученного а слева столько символов, сколько их в разделителе End If End If Sbor = a_ 'функция выводит то, что получилось в а End Function
[/vba]
Ловите [vba]
Код
Function Sbor(d_ As Range, Optional del_ = ";") Application.Volatile 'Автопересчет функции. Если их много, то убрать эту строку If d_.Columns.Count <> 1 Then 'если в ссылке d_ несколько столбцов a_ = "Ссылка д.б. на ОДИН столбец" Else 'иначе r0_ = d_(1).Row 'номер первой строки из ссылки c_ = d_(1).Column 'номер первого столбца из ссылки r1_ = Cells(Rows.Count, c_).End(3).Row 'номер последней заполненной строки с столбце с_ If r1_ < r0_ Then 'если r1<к0 a_ = "Ниже ссылки данных нет" Else 'иначе For i = r0_ To r1_ 'цикл от r0 до r1 If Cells(i, c_) <> "" Then 'если ячейка не пуста a_ = a_ & del_ & Cells(i, c_) 'приклеиваем к переменной а справа разделитель и значение ячейки End If ' Next i a_ = Mid(a_, Len(del_) + 1, Len(a_)) ' отрезаем от полученного а слева столько символов, сколько их в разделителе End If End If Sbor = a_ 'функция выводит то, что получилось в а End Function
Если нужно объединить только уникальные записи [vba]
Код
Function MergeTxt(r As Range, Optional sep As String = ";") As String Dim txt With CreateObject("Scripting.Dictionary") ' создаем словарь ' в цикле заполняем словарь уникальными значениями диапазона For Each txt In r: .Item(txt.Value) = 0&: Next txt MergeTxt = Replace(Join(.keys, sep), ";;", ";") ' объединяем элементы словаря End With End Function
[/vba] В ячейку =MergeTxt(Ваш_диапазон)
Если нужно объединить только уникальные записи [vba]
Код
Function MergeTxt(r As Range, Optional sep As String = ";") As String Dim txt With CreateObject("Scripting.Dictionary") ' создаем словарь ' в цикле заполняем словарь уникальными значениями диапазона For Each txt In r: .Item(txt.Value) = 0&: Next txt MergeTxt = Replace(Join(.keys, sep), ";;", ";") ' объединяем элементы словаря End With End Function
_Boroda_, vikttur, Ещё раз большое спасибо за участие. sboy, Я с вами согласен. Написано коряво. В оправдание могу сказать только то, что в моей просьбе:
я имел в виду окончательный результат, который выводится в десятую колонку. Извиняюсь.
_Boroda_, vikttur, Ещё раз большое спасибо за участие. sboy, Я с вами согласен. Написано коряво. В оправдание могу сказать только то, что в моей просьбе:
Прошу прощения Уважаемые Знатоки Excel. Скажите, то что в первой колонке Excel абсолютно одинаковые значения, может нам как-то "помочь уйти" от программирования в ВБА и решить задачу "сцепления" стандартными функциями Excel?
Прошу прощения Уважаемые Знатоки Excel. Скажите, то что в первой колонке Excel абсолютно одинаковые значения, может нам как-то "помочь уйти" от программирования в ВБА и решить задачу "сцепления" стандартными функциями Excel?Юрий_Нд
Сообщение отредактировал Юрий_Нд - Среда, 06.09.2017, 16:32
Нет. Я говорю о дополнительном столбце вообще вне таблицы или в скрытом (у меня в файле столбец М) 9-й столбец с формулами, которые Вы раньше попросили нас написать. А вот 8-й столбец не совсем ясно зачем Файл с формулой до строки 111. Если нужно больше, то сделайте у столбца М ненулевую ширину и протяните там формулы еще ниже
Нет. Я говорю о дополнительном столбце вообще вне таблицы или в скрытом (у меня в файле столбец М) 9-й столбец с формулами, которые Вы раньше попросили нас написать. А вот 8-й столбец не совсем ясно зачем Файл с формулой до строки 111. Если нужно больше, то сделайте у столбца М ненулевую ширину и протяните там формулы еще ниже_Boroda_