【发布时间】:2019-11-24 09:43:29
【问题描述】:
我想对二维数组的每个元素执行一些操作,其中数组的第二维在每个第一维元素上都不同。我希望循环跳过空元素。
一维数组可以让它在循环中运行,而不会在数组的空元素上浪费任何时间,但我想使用二维数组更容易将数据关联到某个组,并使代码更容易如果需要,稍后由其他人修改。一维数组的运行速度比二维数组快得多。
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 一无所知。
【问题讨论】:
-
你如何定义
somearray?认为我们需要更多的代码。您发布的代码没有明显错误。 -
数组的下界是多少?此外,
On Error Resume Next像这样使用也很糟糕。错误应该被修复或至少被处理,而不是被压制。 -
您能否详细说明 的两个部分,其中数组的第二维在每个第一维元素上都不同。我希望循环跳过空元素。?我不想错误地假设空元素在哪里(,1 或 ,2)
-
如果您的阵列确实有different number of elements in the second dimension,您不能以
somearray(i,j)访问它,而是以somearray(i)(j)访问它。如果您的数组是一个普通数组,其中每行中的最后一些元素是Empty,那么请使用IsEmpty()来避免“循环遍历它们”。 -
我设法弄明白了,cmets 很有帮助。出于某种原因,IsEmpty() 对我不起作用,但 = "" 起作用了。