gpt4 book ai didi

excel - 将范围值传递给数组时,为什么数组索引从 1 开始

转载 作者:行者123 更新时间:2023-12-04 20:43:57 26 4
gpt4 key购买 nike

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

Sub Passarray()
Dim Array As Variant
Dim i, j As Integer
'Pass array and manipulate
Vol = Range("Volatility")
For i = 0 To 2
For j = 0 To 2
Vol(i, j) = 1+ Vol(i,j)
Next j
Next i
End Sub

最佳答案

根据我的经验,当您将 Range 传递给数组时情况并非如此。
我不知道背后的具体原因,但是this link表示您无法更改此行为。

QUOTE: The array into which the worksheet data is loaded always has an lower bound (LBound) equal to 1, regardless of what Option Base directive you may have in your module. You cannot change this behavior.

你可以做的是像这样使用 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

如果您的 Range 只是一列多行,您可以像这样将它传递给 Array:

Vol = Application.Transpose(Range("Volatility"))
For i = LBound(Vol) To UBound(Vol)
'~~> do stuff here
Vol(i) = 1 + Vol(i)
Next

这样,您将生成一维数组而不是二维数组。
要迭代值,您可以使用上面的方法,也可以使用For Each:

Dim x As Variant '~~> dimension another variant variable
For Each x In Vol
'~~> do stuff here
x = 1 + x
Next

关于excel - 将范围值传递给数组时,为什么数组索引从 1 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com