Excel 将范围转换为数组

Excel 将范围转换为数组,excel,vba,Excel,Vba,我知道有很多关于这个主题的帖子已经存在了,但是我仍然找不到一个在这个场景中有效的解决方案。下面两个sub一直给我一个“下标超出范围”错误 为清晰起见,根据以下评论进行编辑 将范围的值指定给变量将导致变量包含按行和列(按此顺序)索引的基于一的二维变量数组,或者如果是单单元格范围,则包含范围的实际值 在您的特定情况下,这将起作用: Sub test1() Dim Arr As Variant Dim row As Long Dim col As Long row =

我知道有很多关于这个主题的帖子已经存在了,但是我仍然找不到一个在这个场景中有效的解决方案。下面两个sub一直给我一个“下标超出范围”错误


为清晰起见,根据以下评论进行编辑

将范围的值指定给变量将导致变量包含按行和列(按此顺序)索引的基于一的二维变量数组,或者如果是单单元格范围,则包含范围的实际值

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

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
在更一般的方法中,如果下游代码希望处理数组,但range有可能覆盖单个单元格,则即使在这种情况下,也可以强制使用数组,方法如下:

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
子测试2()
变暗rng As范围
作为变体的Dim-Arr
将行设置为整数
作为整数的Dim col
行=1
col=1

根据下面的注释,设置rng=Range(“A1:A1”)”为清晰起见进行编辑

将范围的值指定给变量将导致变量包含按行和列(按此顺序)索引的基于一的二维变量数组,或者如果是单单元格范围,则包含范围的实际值

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

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
在更一般的方法中,如果下游代码希望处理数组,但range有可能覆盖单个单元格,则即使在这种情况下,也可以强制使用数组,方法如下:

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
子测试2()
变暗rng As范围
作为变体的Dim-Arr
将行设置为整数
作为整数的Dim col
行=1
col=1

设置rng=Range(“A1:A1”)’值,添加第一个维度是行,第二个维度是列。在一列范围内,第二维度必须为1,但如果
Arr
扩展到
范围(“A1:B10”)
Arr(4,2)
将从B4返回信息。这很公平;将编辑。另一点是1单元格范围的值根本不是数组。值得补充的是,第一个维度是行,第二个维度是列。在一列范围内,第二维度必须为1,但如果
Arr
扩展到
范围(“A1:B10”)
Arr(4,2)
将从B4返回信息。这很公平;将编辑。另一点是1单元格范围的值根本不是数组。