我在示例中看到了 array() = range().value
,我试图了解它是如何工作的。
Sub test()
Dim arr() As Variant
arr() = Range("E5:E7").Value
For i = 0 To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
首先,上面的代码给了我下标超出范围
错误。怎么会 ?其次,文档的哪一部分可以让我知道 array() = range().value
如何在不进行测试的情况下发挥作用?我的假设是它将从左上角到右下角遍历单元格并将它们添加到数组中。我如何确认这一点?
最佳答案
我发现您的代码存在两个问题。第一个是 i 从 0 开始,但 Excel 中的数组从索引 1 开始。您可以使用 For i = LBound(arr)
代替 For i = 0
,例如您可以使用 UBound(arr)
或从 1 开始。
其次,也是更重要的一点,单元格数组同时具有列和行。当您将范围读入变体数组时,您会得到二维结果(行和列),而不是您期望的一维结果。
试试这个:
Sub test()
Dim arr() As Variant
Dim i As Long, j As Long
arr() = Range("E5:E7").Value
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
Debug.Print arr(i, j)
Next j
Next i
End Sub
如果您只想将单元格的值放入一维数组中,可以使用 Transpose
函数来实现,如下所示:
arr() = Application.WorksheetFunction.Transpose(Range("E5:E7").Value)
如果您这样做,该数组现在是一维的,您可以像您尝试的那样迭代它。
arr() = Application.WorksheetFunction.Transpose(Range("E5:E7").Value)
For i = 1 To UBound(arr)
Debug.Print arr(i)
Next i
关于excel - Array() = range().value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185325/