我想在一个一维数组中存储一个可变大小的范围,这个范围从A2开始,到同一列的最后一行,我的方法看起来是这样的,它有缺陷。
Option Explicit
Sub Range_to_Array()
Dim i, j, k As Integer
Dim arr1(), arr2(), arr3(), arr4() As Variant
With Worksheets("table1")
arr1() = .Cells(.Range("A2"), .Range("A1").End(xlDown).Row)
End With
End Sub
3条答案
按热度按时间kxxlusnw1#
请尝试下一种方法。
Application.Transpose
转换一个包含1D类型列的2D数组。无需迭代:c7rzv4ha2#
你的问题是你的范围定义是错误的。
Cells
期望2个参数(行和列)来寻址一个单元格。这不是你想要的,即使这样,你的参数也会是错误的。在您的情况下,您需要的是
Range
。现在可以使用一个或两个参数调用
Range
。如果使用一个参数调用它,则它定义整个范围。
示例:
Range("A1")
或Range("B2:C5")
或Range("B:B")
VBA中经常使用类似
Range("A1:A" & lastRow)
的代码如果使用两个参数调用它,则这两个参数定义范围的第一个和最后一个单元格。
示例:
Range(Range("A1"), Range("C10"))
或Range(Cells(1, 1), Cells(10, 3))
我建议定义一个中间变量来保存范围-使调试更容易。另外,最后一个单元格的行号应该进入一个中间变量。
在您的情况下,可以使用以下选项之一
6tr1vspr3#
试试这个。
还请注意,为了正确地声明变量,您需要分别为每个变量指定数据类型。
实际上意味着