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
我正在开发一个宏,它将从 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