Преобразование диапазона в строку с разделителями-запятыми
Если бы у меня был столбец:
Col1
abc
def
ghi
jkl
Как я могу преобразовать его в строку следующим образом:
"abc,def,ghi,jkl"
Ответ 1
Вы можете использовать функцию Join() для объединения всех элементов 1-мерного массива с разделителем.
Функция Transpose() используется ниже для формирования размерного массива (этот подход работает на одном столбце или строке).
Sub Main()
Dim arr
arr = Join(Application.Transpose(Range("A2:A5").Value), ",")
MsgBox arr
End Sub
или как UDF
Public Function Merge(r As Range) As String
Merge = Join(Application.Transpose(r.Value), ",")
End Function
Ответ 2
На случай, если вам понадобится более тяжелая техника, используйте одно из решений, представленных в ответе ниже. У меня была похожая проблема для диапазонов, содержащих миллионы клеток. В таких случаях JOIN приведет к краху.
Я проверил все подходы, указанные в ссылке выше. Решения, основанные на функции JOIN имеют низкую производительность или даже приводят к сбою.
Обычный цикл через все ячейки намного быстрее, чем функция JOIN. Жало в принятом ответе еще быстрее. С помощью строителя строк строки, состоящие из миллионов ячеек, создаются за считанные секунды. Это решение, которое у меня есть.
Ответ 3
Double-transpose работает для объединения строк в значениях из одной строки. Спасибо @user2140173 и @brettdj!