excel 将变量范围加载到数组

mnemlml8  于 2023-01-27  发布在  其他
关注(0)|答案(3)|浏览(125)

我想在一个一维数组中存储一个可变大小的范围,这个范围从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
kxxlusnw

kxxlusnw1#

请尝试下一种方法。Application.Transpose转换一个包含1D类型列的2D数组。无需迭代:

Sub Array1DFromColumnRange()
 Dim ws As Worksheet, lastR As Long, arr
 
 Set ws = Worksheets("table1")
 lastR = ws.Range("A" & ws.rows.count).End(xlUp).Row
 arr = Application.Transpose(ws.Range("A2:A" & lastR).Value)
    Debug.Print Join(arr, "|") 'just to visually see the result in Immediate Window (Ctrl + G)...
End Sub
c7rzv4ha

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))
我建议定义一个中间变量来保存范围-使调试更容易。另外,最后一个单元格的行号应该进入一个中间变量。
在您的情况下,可以使用以下选项之一

Dim r As Range, lastRow As Long
' Get the last row in use (usually its better to go up from the end of the sheet)
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

' 2 parameters
Set r = .Range(.Cells(2, 1), .Cells(2, lastRow)) 
' 1 Parameter, last row is concatenated to the range definition
Set r = .Range("A2:A" & lastRow)  
' Use Resize 
Set r = .Range("A2").Resize(lastRow-1, 1)   ' -1 because you start at row 2

arr1 = r.Value
6tr1vspr

6tr1vspr3#

试试这个。

Sub Range_to_Array()

Dim i As Integer, j As Integer, k As Integer
Dim arr1() As Variant, arr2() As Variant, arr3() As Variant, arr4() As Variant
Dim myRange As Range
    With Worksheets("table1")
        arr1 = .Range(.Range("A2"), .Range("A1").End(xlDown)).Value

    End With
    Debug.Print arr1(1, 1)
End Sub

还请注意,为了正确地声明变量,您需要分别为每个变量指定数据类型。

Dim i, j, k As Integer

实际上意味着

Dim i As Variant, j As Variant, k As Integer

相关问题