Объединить значения нескольких массивов в VBA для Excel - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь объединить элементы нескольких массивов в окончательный массив, в котором будет храниться объединение. Код должен сначала зациклить и сохранить значения из ячеек, а затем объединить сохраненные значения. Из ячеек:

A 1 V
B 2 W
C 3 X
D 4 Y
E 5 Z

Новый массив:

A1V
B2V
C3X
D4Y
E5Z

Пример кода:

sub Concatenation()
Dim CntCol_updated As Long, CntRow_updated As Long
With Worksheets("Sheet1")



    CntCol_updated = Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight)).Count
    CntRow_updated = Range(.Cells(1, 2), .Cells(1, 2).End(xlDown)).Count

    Dim Largeur() As Variant
    Dim Série() As Variant
    Dim Diamètre() As Variant
    Dim Charge() As Variant
    Dim Concatenated_Array() As Variant


    Largeur = Range(Cells(1, 9), Cells(CntRow_updated, 9))
    Série = Range(Cells(1, 10), Cells(CntRow_updated, 10))
    Diamètre = Range(Cells(1, 11), Cells(CntRow_updated, 11))
    Charge = Range(Cells(1, 12), Cells(CntRow_updated, 12))


    ReDim Concatenated_Array(UBound(Largeur))
    For i = LBound(Largeur) To UBound(Largeur)
          Concatenated_Array = Largeur(i) & Série(i)  & Diamètre(i) & Charge(i)
    Next i


    Range("A28:A53").value = Concatenated_Array

end with
end sub

1 Ответ

0 голосов
/ 10 мая 2019

Когда вы считываете диапазоны в массив, вы генерируете двумерный массив с основанием 1. Так, например, Largeur - это 2d и начинается с 1, тогда как Concatenated_Array - это 1d и начинается с 0.

Вместо этого вы можете прочитать различные диапазоны в одном массиве, изменить размер, чтобы добавить другой столбец в конце, зациклить все строки в массиве и объединить столбцы 1-4 и добавить в столбец 5. Затем вы можете получить доступ к тому, что хотите из последнего столбца в массиве.

Dim loopArray()
With ActiveSheet
    loopArray = .Range(.Cells(1, 9), .Cells(CntRow_updated, 12)).Value
End With
ReDim Preserve loopArray(1 To UBound(loopArray, 1), 1 To UBound(loopArray, 2) + 1) 'make space for concatenated column at end

For i = LBound(loopArray, 1) To UBound(loopArray, 1)
    loopArray(i, 5) = loopArray(i, 1) & loopArray(i, 3) & loopArray(i, 3) & loopArray(i, 4)
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...