我想对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一无所知。
答案 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
不在范围内。 >