У меня есть диапазон ячеек, как показано ниже:
Col A | Col B | Col C | Col D
apple, orange | red, green | 5 | 10
pear, banana | blue | 20 | 40
Я хочу получить результат, который выглядит следующим образом:
Col A
apple-red-5-10
apple-green-5-10
orange-red-5-10
orange-green-5-10
pear-blue-20-40
banana-blue-20-40
Я объединяю значения в каждой строке по несколькимстолбцы, но если ячейка содержит список элементов, разделенных запятыми, мне нужно обрабатывать каждую запись, как если бы они принадлежали новой строке с включением других данных столбца.
Сначала я ссылаюсь на диапазон, принадлежащий четырем столбцам, которые я заинтересован в объединении.
Dim cellRef1 As Range
Set cellRef1 = ThisWorkbook.Worksheets(1).Range("I2:I60")
Dim cellRef2 As Range
Set cellRef2 = ThisWorkbook.Worksheets(1).Range("E2:E60")
Dim cellRef3 As Range
Set cellRef3 = ThisWorkbook.Worksheets(1).Range("D2:D60")
Dim cellRef4 As Range
Set cellRef4 = ThisWorkbook.Worksheets(1).Range("H2:H60")
Затем для столбцов, которые будут иметь разделенные запятыми записи (второй и четвертый), я создаю массив для хранения каждого значения, например:
Dim Array_Two As Variant
Array_Two = cellRef2.Value
Таким образом, у меня будет массивпо линиям
("apple, orange", "pear,banana")
Я хотел пройтись по каждому массиву, чтобы создать подмассив, в котором я хочу разделить записи запятой и сохранить их в новом массиве.
например, я хочу:
Array_Two_A = ("apple", "orange")
Array_Two_B = ("pear", "banana)
, чтобы позже я мог получить доступ к каждой записи и объединить их.
Я хотел сделать это, используя:
Dim Array_Two_New() As String
For x = LBound(Array_Two) To UBound(Array_Two)
Array_Two_New = Split(Array_Two(x, 1), ",")
Next x
Какие виды работ, но проблема в том, что я не могу понять, как динамически создать массив, к которому я смогу получить доступ позже.
Например, мой код будет перезаписывать массив Array_Two_New первым значением, на которое разбита строка в Array_Two (x, 1).
Я подумал, что мог бы добавить Array_Two_New (x) в мой код, чтобы получить результат вроде:
Array_Two_New(1) = ("apple", "orange")
Array_Two_New(2) = ("pear", "banana")
И позже я смогу получить доступ к нужному значению, например
Array_Two_New(1)(1) = "apple"
Array_Two_New(1)(2) = "orange"
Array_Two_New(2)(1) = "pear" // etc.
Я думаю, что я путаю синтаксис здесь.
Я думаю, что мне нужно использовать объект, но я не слишком знаком с ним.
Я нашел эти статьи, но не смог следовать объяснениям.
VBA: разбить значения ячеек на несколько строк и сохранить другие данные
Разделение массива на несколько строк