如何将A2至A列最后一行的可变单元格区域存入一维数组?现有代码存在问题
将A列可变区域转为一维数组的修正方案
原代码存在的问题
- 区域引用语法错误:
.Cells(.Range("A2"), .Range("A1").End(xlDown).Row)不符合Cells方法的参数规则,无法正确定义目标区域 - 最后一行定位不可靠:
A1.End(xlDown)若遇到中间空行会提前终止,无法定位真正的最后数据行 - 直接赋值得到二维数组:单列区域赋值给数组默认是
arr(1 To n, 1 To 1)格式的二维数组,并非需求的一维数组
方案1:转置法(适合数据量不大的场景)
利用Application.Transpose将二维数组转为一维,代码简洁:
Option Explicit Sub Range_to_Array() Dim arr1 As Variant Dim lastRow As Long With Worksheets("table1") ' 从A列底部向上定位最后一行数据 lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' 校验数据行是否存在 If lastRow >= 2 Then ' 获取区域并转置为一维数组 arr1 = Application.Transpose(.Range("A2:A" & lastRow).Value) Else MsgBox "A2下方无有效数据" End If End With End Sub
方案2:循环填充法(无数据量限制)
当数据行数超过65536时,Transpose会报错,此时用手动循环更可靠:
Option Explicit Sub Range_to_Array() Dim arr1() As Variant Dim lastRow As Long, i As Long With Worksheets("table1") lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row If lastRow >= 2 Then ' 定义一维数组长度 ReDim arr1(1 To lastRow - 1) ' 循环填充数组 For i = 2 To lastRow arr1(i - 1) = .Cells(i, "A").Value Next i Else MsgBox "A2下方无有效数据" End If End With End Sub
额外优化建议
- 变量声明要精准:原代码
Dim i, j, k As Integer仅k为Integer类型,i/j为Variant,处理行号建议用Long类型(避免超出Integer的数值上限) - 增加数据校验:避免无数据时出现数组赋值错误
内容的提问来源于stack exchange,提问作者D3merzel
相关产品推荐
相关产品推荐

