我需要将一系列单元格放入一个数组中,这本身就足够简单了:
Dim matchArray As Variant
matchArray = Sheets(lookupSheet).Range("B2:B12000").Value2
这将创建一个二维数组,其中一列作为第二维,如果扩展范围以包含第二列,则会创建一个二维数组,其中第二维包含两列:
matchArray = Sheets(lookupSheet).Range("B2:C12000").Value2
但是,如果这两列没有彼此相邻并且您不希望中间的那一列怎么办呢?
matchArray = Sheets(lookupSheet).Range("B2:B12000,D2:D12000").Value2
以上是我最好的猜测,但它不起作用,它只返回指定的第一个范围。
所以我需要的是一种将范围单元格值返回到数组的特定维度的方法。
我知道我可以通过循环遍历行来完成它,但是我将使用的行数需要太长时间。
答案 0 :(得分:5)
你确实需要一个循环 - 但是在VBA数组而不是单个单元格上循环:
Error in builtin_genomes() : could not find function "builtin_genomes"
这应该只需要几分之一秒。
答案 1 :(得分:3)
你可以用一个参差不齐的数组来做到这一点:
Dim var1(1 To 2) As Variant
Dim var As Variant
var = Range("A1:A10").Value2
var1(1) = var
var = Range("c1:c10").Value2
var1(2) = var
MsgBox var1(1)(3, 1)
答案 2 :(得分:1)
以下是一些方法:
Sub Example1()
Const lookupSheet As String = "Sheet1"
Dim matchArray As Variant, arr1 As Variant, arr2 As Variant
With Sheets(lookupSheet)
arr1 = WorksheetFunction.Transpose(.Range("B2:B12000").Value2)
arr2 = WorksheetFunction.Transpose(.Range("D2:D12000").Value2)
matchArray = WorksheetFunction.Transpose(Array(arr1, arr2))
End With
End Sub
Sub Example2()
Const lookupSheet As String = "Sheet1"
Dim matchArray As Variant
Dim x As Long
With Sheets(lookupSheet)
matchArray = .Range("B2:B12000").Resize(, 2).Value2
For Each v In .Range("D2:D12000").Value2
x = x + 1
matchArray(x, 2) = v
Next
End With
End Sub
答案 3 :(得分:0)
可能没有John Coleman的答案快,但我认为这可以做你想要的。
Sub x()
Dim matchArray, r As Range
Set r = Sheets(lookupSheet).Range("B2:D12000")
matchArray = Application.Index(r, Evaluate("Row(1:" & r.Rows.Count & ")"), Array(1, 3))
End Sub