Excel VBA使用数组复制列时如何将数据从Sheet6的A2、B2行开始粘贴
问题原因
你当前代码默认从Sheet6第1行写入的核心原因是:VBA中将工作表Range赋值给变体数组时,数组默认是1下标开头的,你循环时直接把数组下标i作为行号使用,i=1时自然就写到了第1行。
修改方案
方案1:最小改动适配原有代码
仅需要把写入Sheet6的行号参数加1即可,同时可以删掉冗余的ReDim语句(Range赋值给数组时会自动重定义数组维度,提前ReDim反而可能引发边界错误):
Dim ColumnAarray() As Variant Dim my_Arange As Range LastRow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row Set my_Arange = Sheet1.Range("A2:B" & LastRow) ColumnAarray = my_Arange For i = LBound(ColumnAarray) To UBound(ColumnAarray) Sheet6.Range("A" & i + 1) = ColumnAarray(i, 1) Sheet6.Range("B" & i + 1) = ColumnAarray(i, 2) Next i
方案2:更高效的无循环写法
不需要逐行遍历赋值,VBA支持等尺寸范围直接批量赋值,运行效率更高:
Dim LastRow As Long ' 读取Sheet1A列最后有数据的行号 LastRow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row ' 源范围和目标范围尺寸完全一致,直接批量赋值 Sheet6.Range("A2:B" & LastRow) = Sheet1.Range("A2:B" & LastRow).Value
内容的提问来源于stack exchange,提问作者user15169505
相关产品推荐
相关产品推荐

