Excel VBA - 用 6 列填充数组,两次

Excel VBA - Populate Array with 6 columns, twice

我正在开发一个宏,它将从 6 个不同的列中获取值并将它们组合到一列中,然后对另外 6 列中的相应值执行相同的操作。

需要说明的示例(为简洁起见,每列使用 3 列而不是 6 列):

|School 1|School 2|School 3|City 1|City 2|City 3|
|a       |b       |c       |1     |2     |3     |

变成一个有值的数组

array(0,0) = a
array(1,0) = b
array(2,0) = 3
array(0,1) = 1
array(1,1) = 2
array(2,1) = 3

每列有 2000 行。我当前的代码如下所示。

Sub split_other()

Dim collector(11999, 1) As String

Dim counter1 As Integer
    counter1 = 0

Dim i As Range

Dim Schools As Range
    Set Schools = ActiveWorkbook.Worksheets("Parsing").Range("AB3", "AH2000")
Dim Cities As Range
    Set Cities = ActiveWorkbook.Worksheets("Parsing").Range("AJ3", "AP2000")

For Each i In Schools
    collector(counter1, 0) = i.Value
    counter1 = counter1 + 1
Next

For Each i In Cities
    collector(counter1, 1) = i.Value
    counter1 = counter1 + 1
Next

End Sub

我遇到的问题是,通过观察 Locals 视图,我可以看到 For Each 循环没有填充数组。此外,宏最终会遇到类型不匹配错误。前者是更直接的问题。

只需将值直接赋给数组即可:

Sub split_other()

Dim collector() As Variant

With ActiveWorkbook.Worksheets("Sheet1")
    ReDim collector(1 To .Range("AB3", "AH2000").Cells.Count, 1 To 2) As Variant
    Dim counter1 As Integer
        counter1 = 1

    Dim i As Variant

    Dim Schools() As Variant
        Schools = .Range("AB3", "AH2000").Value
    Dim Cities() As Variant
        Cities = .Range("AJ3", "AP2000").Value


    For Each i In Schools
        collector(counter1, 1) = i
        counter1 = counter1 + 1
    Next

    counter1 = 1

    For Each i In Cities
        collector(counter1, 2) = i
        counter1 = counter1 + 1
    Next

    .Range("AQ3").Resize(UBound(collector, 1), UBound(collector, 2)).Value = collector
End With
End Sub