excel - Array() = range().value

标签 excel vba

我在示例中看到了 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/

相关文章:

java - 使用jxl解析Excel

excel - 将 Excel 工作表复制到 Word

java.sql.SQLException : Invalid Oracle URL specified for Java8 using oracle driver

vba - 编写宏以在安装插件后自动运行

vba - 计算列中值的数量(值是文本格式的数字)

ms-access - Microsoft VBScript 编译错误 : Expected end of statement

excel - 使用 VBA 宏在 Excel 中的员工病假表

excel - 从 Excel 电子表格中删除包含重复数据的行?

ms-access - 更新一行后 MS Access 运行代码

excel - 从另一个工作表中选择一个复选框