如何将单元格的范围变成特定的数组维度

我需要将一系列的单元格放到一个数组中,这本身就够简单了:

Dim matchArray As Variant matchArray = Sheets(lookupSheet).Range("B2:B12000").Value2 

这将创build一个二维数组,其中一列作为第二维,如果将范围扩展为包括第二列,则会为第二维创build一个具有两列的二维数组:

 matchArray = Sheets(lookupSheet).Range("B2:C12000").Value2 

但是,如果两列不相邻而又​​不想在中间呢?

 matchArray = Sheets(lookupSheet).Range("B2:B12000,D2:D12000").Value2 

以上将是我最好的猜测,但它不起作用,它只返回指定的第一个范围。

所以我需要的是一种将范围单元格值返回到数组的特定维度的方法。

我知道我可以通过循环遍历行来完成,但是我将要处理的行数会花费太长的时间。

你确实需要一个循环 – 但循环VBA数组而不是单个单元格:

 Sub Test() Dim A As Variant, B As Variant, C As Variant Dim i As Long B = Sheets(lookupSheet).Range("B2:B12000").Value2 C = Sheets(lookupSheet).Range("D2:D12000").Value2 ReDim A(1 To 11999, 1 To 2) For i = 1 To 11999 A(i, 1) = B(i, 1) A(i, 2) = C(i, 2) Next i 'do stuff with A End Sub 

这应该只需要几分之一秒。

你可以用一个破旧的数组来做到这一点:

 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) 

这里有几个方法:

 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 

大概不会比约翰·科尔曼的答案更快,但我认为这是你想要的。

 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