请求完善Excel VBA宏:空单元格时复制上方值并删除上方行
VBA宏实现A列空单元格补值并删除上方行
需求明确:当A列某单元格为空时,先把它上方单元格的A列值复制到这个空单元格,再删除上方的行(比如A3为空时,先把A2的值复制到A3,再删除第2行)。
你当前的代码直接删除了空单元格的上一行,漏掉了复制值到空单元格的关键步骤,而且最后一行的判断用了B列,逻辑上不如直接用A列准确。下面是修正后的完整代码:
Sub RowAboveDelete() Dim ws As Worksheet: Set ws = Sheets("Sheet2") Dim lr As Long ' 取A列最后一行有数据的行号,更贴合需求场景 lr = ws.Cells(Rows.Count, 1).End(xlUp).Row Dim i As Long ' 从下往上循环,避免删除行后打乱未处理的行号顺序 For i = lr To 2 Step -1 ' 判断当前A列单元格是否为空 If IsEmpty(ws.Cells(i, 1)) Then ' 复制上一行A列的值到当前空单元格 ws.Cells(i, 1).Value = ws.Cells(i - 1, 1).Value ' 删除上方的行 ws.Rows(i - 1).Delete End If Next i End Sub
关键修正点说明
- 把最后一行的判断改为A列:因为我们处理的是A列的空值,用A列的最后一行数据行号更准确,避免B列数据比A列多导致的无效循环。
- 循环从
lr到2:防止i=1时访问i-1(行0)引发错误。 - 先赋值再删行:严格按照需求顺序执行,确保空单元格先获取值,再删除上方的冗余行。
内容的提问来源于stack exchange,提问作者FotoDJ
相关产品推荐
相关产品推荐

