利用上述方案将工作表中的数据引入VBA数组后,我们要注意该数组始终是二维的。第一个维度是行,第二个维度是列。因此,下面的例子:Dim Arr() As Variant Arr = Range("A1:C5")Arr被隐式地调整为Arr(1 to 5,1 to 3),其中5是行数,3是列数。即使工作表数据位于一行或一列(例如,Arr(1 to 10,1 to 1))中,也会创建二维数组。加载工作表数据的数组始终具有等于1的下限(LBound),而不管模块中可能具有什么选项基指令。你不能改变这种行为。例如: Dim Arr() As Variant Arr = Range("A1:A10")这里,Arr由VBA自动标注为Arr(1 to 10,1 to 1)。您可以使用如下代码在工作表值数组中循环:Sub MYNZC() Dim Arr() As Variant Arr = Range("A1:B10") Dim R As Long Dim C As Long For R = 1 To UBound(Arr, 1) ' 数组第一维表示行. For C = 1 To UBound(Arr, 2) '数组第二维表示列 Debug.Print Arr(R, C) Next NextEnd Sub代码截图:代码的运行:
3 工作表上指定范围如果是一个单元格时
在将指定的范围数据引入数组时很多的时候我们会遇到一种特例,就是只有一个单元格,这个时候往往利用上述方法会报错,有的时候是数组的赋值报错,有的时候是数组的上下标报错,视具体的代码应用而定。这个错误该该如何处理呢?我们可以利用下面的代码: Sub MYNZD() '当工作表上的区域是单个单元格时 Dim Arr As Variant Sheets("Sheet3").UsedRange.Select m = Selection.Cells.Count If m = 1 Then ReDim Arr(1 To 1, 1 To 1) Arr(1, 1) = Sheets("Sheet3").UsedRange MsgBox Arr(1, 1) Else Arr = Sheets("Sheet3").UsedRange MsgBox Arr(1, 1) End IfEnd Sub代码截图: 上面的代码成功的避免了这种错误。大家在利用这种数组赋值时避免这类错误的发生。 本节知识点回向:读取指定范围的数据到数组有哪些方法可以利用?读取后的数组是几维数组?如何避免指定范围只有一个单元格的情况? 本专题参考程序文件:004工作表.XLSM