Excel 向数组传递范围值时,为什么数组索引从1开始

Excel 向数组传递范围值时,为什么数组索引从1开始,excel,vba,Excel,Vba,在这个VBA程序中,我要做的就是从电子表格中传递一个数组,并在每个数组的单元格中添加1。我的问题是数组的索引。当我开始循环数组时,它不会 当我从零开始索引时工作(我得到的错误下标超出范围),但当我从1开始数组时,它工作得很好。为什么呢?(我认为只有我在顶部选项底部1指定的情况下才会出现这种情况) 根据我的经验,将范围传递给数组时,情况并非如此。 我不知道背后的具体原因,但表示您无法改变这种行为。 QUOTE:无论模块中可能有哪个Option Base指令,加载工作表数据的数组的下限(LBound

在这个VBA程序中,我要做的就是从电子表格中传递一个数组,并在每个数组的单元格中添加1。我的问题是数组的索引。当我开始循环数组时,它不会 当我从零开始索引时工作(我得到的错误下标超出范围),但当我从1开始数组时,它工作得很好。为什么呢?(我认为只有我在顶部选项底部1指定的情况下才会出现这种情况)


根据我的经验,将范围传递给数组时,情况并非如此。
我不知道背后的具体原因,但表示您无法改变这种行为。

QUOTE:无论模块中可能有哪个Option Base指令,加载工作表数据的数组的下限(LBound)始终等于1。您无法更改此行为

您可以这样使用LBound/UBound:

Vol = Range("Volatility")
For i = LBound(Vol, 1) To UBound(Vol, 1)
    For j = Lbound(Vol, 2) To Ubound(Vol, 2)
        '~~> do stuff here
        Vol(i, j) = 1 + Vol(i, j)
    Next j
Next i
Vol = Application.Transpose(Range("Volatility"))
For i = LBound(Vol) To UBound(Vol)
    '~~> do stuff here
    Vol(i) = 1 + Vol(i)
Next
然而,如果您的范围只有一列和几行,则将其传递给数组,如下所示:

Vol = Range("Volatility")
For i = LBound(Vol, 1) To UBound(Vol, 1)
    For j = Lbound(Vol, 2) To Ubound(Vol, 2)
        '~~> do stuff here
        Vol(i, j) = 1 + Vol(i, j)
    Next j
Next i
Vol = Application.Transpose(Range("Volatility"))
For i = LBound(Vol) To UBound(Vol)
    '~~> do stuff here
    Vol(i) = 1 + Vol(i)
Next
这样,您将生成一维数组而不是二维数组。
要迭代上述值,您可以使用,也可以对每个值使用:


与你的问题无关,但你是否意识到我不是一个整数,而是一个变量?在VBA中,不能链接声明。您需要将i设置为整数,j设置为整数。