将范围转换为数组

时间:2018-11-22 16:03:44

标签: excel vba

我知道已经有很多与此主题相关的主题,但是我仍然找不到在这种情况下可行的解决方案。以下两个子选项始终使我出现“下标超出范围”错误。

Sub test1()
    Dim Arr() As Variant
    Arr= Range("A1:A10")

    MsgBox Arr(0)

End Sub

Sub test1()
    Dim Arr As Variant
    Arr= Range("A1:A10").Value

    MsgBox Arr(0)

End Sub

1 个答案:

答案 0 :(得分:4)

编辑为清楚起见,请参阅以下评论。

将范围的值分配给Variant变量将导致该变量包含按行和列索引(按此顺序)的基于变量的一维2D数组,或者包含范围的实际值(如果为1)单元格范围。

在您的特定情况下,这将起作用:

Sub test1()
    Dim Arr As Variant
    Dim row As Long
    Dim col As Long

    row = 1
    col = 1

    Arr = Range("A1:A10").Value

    MsgBox Arr(row, col)
End Sub

在更通用的方法中,如果您的下游代码希望处理数组,但是您的范围有可能覆盖单个单元格,则即使在这种情况下,也可以按照以下方式强制使用数组:

Sub test2()
    Dim rng As Range
    Dim Arr As Variant
    Dim row As Integer
    Dim col As Integer

    row = 1
    col = 1

    Set rng = Range("A1:A1") '<== 1 cell only!

    Arr = rng.Value

    'Ensure we're dealing with an array even in this case.
    If Not IsArray(Arr) Then
        ReDim Arr(1 To 1, 1 To 1) As Variant
        Arr(1, 1) = rng.Value
    End If

    MsgBox Arr(row, col)
End Sub