将范围的值分配给数组

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

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

当使用波纹pipe时,下Subscript out of range运行时错误信息将会显示。

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

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

如果您尝试返回数据(210),则将其引用为单维数组,则转换为数组的范围将创build2维数组。 您可以通过返回从范围内的第210个单元格中获取值

 data(210, 1) 

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

为了确保您的示例能够正常工作,请确保您的表格示例中有210行。


一般来说,尝试这样的事情来获得数组和范围的想法:

  • 创build一个具有多个列和多个行的简单命名范围MyNamedRange
  • 把一些值放在里面
  • 运行这个,看看你在即时窗口中得到什么:

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

改变(1,2)值有点想法。