以0开始for循环(而不是1)

时间:2016-07-16 16:08:09

标签: excel vba

为什么我无法在0处启动for循环?

Dim counter As Integer
For counter = 1 To 10
    Cells(0, counter).Value = arr(counter)
Next counter

这将错过数组中的第一个索引。

这个问题是否有任何可能的解决方案?

3 个答案:

答案 0 :(得分:2)

您可以使用 Option Base 1 ,但它无法控制数组索引的内容和方式。

Split function始终会创建一个从零开始的单维数组,无论您是否已将默认值更改为Option Base 1

将变量数组中的批量加载工作表.Value始终生成基于1的二维数组,无论您是显式设置Optiona Base 0还是仅引用单行或单列单元格。

我发现最好始终使用LBoundUBound函数来获取数组的范围。调整数字,这样您就不会尝试引用单元格A0或类似的东西(例如#REF!)。

Dim counter As Long
debug.print Lbound(arr) & ":" & uBound(arr)
For counter = LBound(arr) To UBound(arr)
    Cells(1, counter + 1).Value = arr(counter)
Next counter

答案 1 :(得分:1)

作为@Ralph指出的替代方法,您可以使用Offset的{​​{1}} - 因此两者 - 您的数组和范围引用将从0开始:

Range

P.S。:避免命名数组Dim counter As Integer For counter = 0 To 9 Cells(1, 1).Offset(0, counter).Value = arr(counter) Next counter ,因为存在具有相同名称的VBA函数。您可以使用类似array的内容。

答案 2 :(得分:0)

...简单

Dim counter As Integer

For counter = 1 To 10
    Cells(1, counter).Value = array(counter - 1)
Next counter