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

时间:2019-07-15 16:40:33

标签: excel vba

我想对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

应该注意的是,我确实在没有On Error Resume Next的情况下得到了下标9超出范围的错误。我认为这是因为它试图对不存在的对象执行操作。它可以按预期工作,但速度较慢。

我很抱歉这个问题不重要。我找不到答案,对VBA一无所知。

1 个答案:

答案 0 :(得分:2)

删除On Error Resume Next,不要对下限进行硬编码:

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

如果您从Range获得2D数组,则它是基于1的Variant数组,因此下标0 不在范围内。 >