Excel VBA如何复制每行最后一列的值(兼容行内存在空单元格场景)
问题原因
你原有代码的问题在于使用Range("a" & i).End(xlToRight)定位行末非空单元格,该方法从A列向右遍历,遇到第一个空单元格就会停止,因此行内存在空值时无法定位到真正的最右侧非空单元格。
调整后代码
Dim lastrow As Long, i As Long lastrow = Cells(Rows.Count, "a").End(xlUp).Row For i = 2 To lastrow ' 从当前行最右侧列向左查找最后一个非空单元格,直接赋值给A列对应行 Range("A" & i).Value = Cells(i, Columns.Count).End(xlToLeft).Value Next i
代码说明
- 核心定位逻辑改为从工作表最大列向左查找非空单元格:
Cells(i, Columns.Count).End(xlToLeft),无论行中间是否存在空单元格,都能准确识别到该行最后一个有内容的单元格 - 直接赋值替代复制粘贴操作,执行效率更高,也无需额外处理剪切板状态
- 完全适配你提到的A2取D2值、A3取C3值的需求场景
内容的提问来源于stack exchange,提问作者Arkaelum
相关产品推荐
相关产品推荐

