Excel VBA如何实现复制工作表数据区域的最后N行数据?
VBA动态取最后N行数据的实现方案
你完全可以沿用当前直接赋值的高效方法,只需要调整源数据区域Dat1的定义逻辑即可,不需要更换实现思路。原方法直接通过单元格数组批量读写,性能远优于复制粘贴操作,非常适合测试结果这类批量数据的迁移场景。
具体实现代码
Dim lastRow As Long Dim targetRows As Long targetRows = 20 ' 可修改为任意需要提取的行数 With Workbooks("Test Results.xlsm").Worksheets("Example") ' 定位AP列最后一个有数据的行,避免固定15000行带来的空行问题 lastRow = .Cells(.Rows.Count, "AP").End(xlUp).Row ' 边界异常处理:有效行数不足指定行数时,取AP31之后的所有有效数据 If lastRow - targetRows + 1 < 31 Then Set Dat1 = .Range("AP31:AP" & lastRow) Else ' 取最后targetRows行的范围 Set Dat1 = .Range("AP" & (lastRow - targetRows + 1) & ":AP" & lastRow) End If End With ' 沿用原有赋值逻辑,自动适配源数据大小写入目标区域 Raw1.Range("A3").Resize(Dat1.Rows.Count, Dat1.Columns.Count).Value = Dat1.Value
改动说明
- 保留了原有直接赋值的核心逻辑,仅将原固定范围
AP31:AP15000替换为动态计算的最后N行范围 - 新增边界判断逻辑,避免实际有效数据量不足指定行数时出现范围定义错误
- 写入目标区域时去掉了原硬编码的结束行号,通过
Resize自动适配源数据的实际大小,不会写入多余空值
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

