Excel VBA遍历二维数组的每个非空元素

Excel VBA遍历二维数组的每个非空元素,excel,vba,Excel,Vba,我想对2D数组的每个元素执行一些操作,其中数组的第二维度在每个第一维度元素上都有所不同。我希望循环跳过空元素 1D数组可以让它在循环中运行,而不会在数组的空元素上浪费任何时间,但我希望使用2D数组可以更容易地将数据关联到某个组中,并使代码更容易在以后需要时由其他人修改。一维阵列的运行速度比二维阵列快得多 Application.EnableCancelKey = xlDisabled On Error Resume Next For i = 0 To UBound(somearray,1)

我想对2D数组的每个元素执行一些操作,其中数组的第二维度在每个第一维度元素上都有所不同。我希望循环跳过空元素

1D数组可以让它在循环中运行,而不会在数组的空元素上浪费任何时间,但我希望使用2D数组可以更容易地将数据关联到某个组中,并使代码更容易在以后需要时由其他人修改。一维阵列的运行速度比二维阵列快得多

Application.EnableCancelKey = xlDisabled

On Error Resume Next

For i = 0 To UBound(somearray,1)    
    For j = 0 To UBound(somearray,2)
        perform some action on somearray(i,j)    
    Next j
Next i
应该注意的是,我确实得到了一个下标9超出范围的错误,而没有错误恢复下一步的
。我认为这是因为它试图对不存在的东西执行操作。它按预期工作,但速度较慢


如果这个问题很琐碎,我道歉。我找不到这个问题的答案,我对VBA一无所知。

删除错误时的
“下一步继续”
,不要硬编码下限:

Dim currentRow As Long
For currentRow = LBound(somearray, 1) To UBound(somearray, 1)
    Dim currentColumn As Long
    For currentColumn = LBound(somearray, 2) To UBound(somearray, 2)
        DoSomething somearray(currentRow, currentColumn)
    Next
Next

如果您从
范围
获取2D数组,它是一个基于1的
变量
数组,因此下标
0
超出范围。

如何定义
somearray
?我想我们需要更多的代码。您发布的代码没有明显错误。数组的下限是多少?而且,当像那样使用时,
在出错时继续下一步
,这太糟糕了。错误应该是固定的,或者至少是处理的,而不是抑制的。你能详细说明数组的第二维度在每个第一维度元素上变化的两个部分吗。我希望循环跳过空元素。?我不想错误地假设空元素的位置是(,1或,2)。如果您的数组确实有空元素,那么您不能作为
somearray(I,j)
访问它,而是作为
somearray(I)(j)
访问它。如果您的数组是一个普通数组,其中每行最后的一些元素都是
空的
,那么请使用
IsEmpty()。出于某种原因,IsEmpty()对我不起作用,但“”确实起作用。