将范围放入数组中以获得更高效的循环

我在一个函数中有一堆循环,它们循环遍历一个我定义为dynamic范围的数组。 下面是我想要实现的一些伪代码

Dim myArray As Range myArray(x, j) 'So the array loops through each column and then each row in that column For i = 1 to lastRow If myArray(x, j).Value = myArray(x, i).Value Then 'Do something 

我有一堆这些循环,超过100行的数据集超慢。 基本上我把myArray定义为一个Range的地方,我想把它改成一个Variant,所以我可以a)遍历数组,b)使用数组来检查值是否相同,而不是检查范围,这可能是200行* 500列的性能问题的根本原因

编辑

我如何将dynamic定义的范围转换为数组?

我需要做这样的事吗?

 lastRow = UBound(myArray, 1) lastColumn = UBound(myArray, 2) 

接着

 If myArray(x, j) = myArray(x, i) Then 'Do something 

将一个范围加载到一个数组中:

 Dim RngArr() as Variant RngArr = WorkSheets("Sheet1").Range("A1:D4").Value 

这将创build和数组是4 x 4。

使范围dynamic

 Dim RngArr() as Variant Dim lastrow as Long Dim lastColumn as Long lastrow = 10 lastColumn = 10 With WorkSheets("Sheet1") RngArr = .Range(.Cells(1,1),.Cells(lastrow,lastColumn)).Value End With 

以这种方式加载数组时,两个维度的下界是1,而不是0,否则就是这样。

遍历数组:

 Dim i as long, j as long For i = lbound(RngArr, 1) to Ubound(RngArr, 1) For j = lbound(RngArr, 2) to Ubound(RngArr, 2) 'Do something with RngArr(i,j) Next j Next i 

lbound和ubound的第二个标准是维度。