将范围的值分配给数组

时间:2017-10-05 09:40:53

标签: arrays excel vba excel-vba range

我编写了下面的代码,在即时窗口中打印210

Sub RangeToArr()
    Dim data() As Variant
    data = Range("Salary[EmpNum]").Value
    Debug.Print UBound(data)
End Sub

当我使用bellow时,将显示Subscript out of range运行时错误消息。

Sub RangeToArr()
    Dim data() As Variant
    data = Range("Salary[EmpNum]").Value
    Debug.Print data(210)
End Sub

如果data是一个数组,那么问题是什么,否则,如何访问分配给数组的范围值,如上所述?

2 个答案:

答案 0 :(得分:2)

转换为数组的范围将创建一个二维数组,如果您尝试返回引用它的数据(210),就好像它是一个单维数组一样。您可以通过返回

从该范围内的第210个单元格中获取值
data(210, 1)

我只能假设它强迫二维数组的原因。我的猜测是因为如果你的范围包括额外的列,它将是二维数组。即使您只有一列,创建二维数组的行为也意味着处理数据的方法保持不变。这有一个例外 - 如果您的范围是单个单元格,VBA将仅将该值填充为单个维度。

答案 1 :(得分:1)

要确保您的示例有效,请确保表格示例中有210行。

通常,尝试这样的方法来了解数组和范围:

  • 包含多个列和多行的简单命名范围MyNamedRange
  • 在其中加入一些值
  • 运行此项并查看您在即时窗口中获得的内容:
Sub RangeToArr()

    Dim arrVar  As Variant
    arrVar = Range("MyNamedRange")
    Debug.Print arrVar(1, 2)

End Sub

稍微更改(1,2)值以获得想法。

相关问题