VBA需求:用下方非空行数据批量填充上方连续空白行
空白行填充下方紧邻非空行内容的VBA实现
核心逻辑
必须用反向For循环的原因很简单:如果从第一行往下遍历,填充空白行后会覆盖原本的空白状态,导致后续循环误判已填充的行。从最后一行往上遍历,就能完全避免这个问题,确保每一个空白行都能准确抓取到下方紧邻的非空行数据。
完整VBA代码
Sub FillBlankRowsWithBelowData() Dim lastRow As Long Dim i As Long ' 获取数据区域的最后一行(以A列为例,可根据实际列调整) lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 从倒数第二行开始,向上反向循环 For i = lastRow - 1 To 1 Step -1 ' 以A列单元格为空作为整行空白的判断依据,可按需修改列名 If IsEmpty(Cells(i, "A")) Then ' 将下一行的所有内容复制到当前空白行 Rows(i).Value = Rows(i + 1).Value End If Next i End Sub
代码细节说明
lastRow = Cells(Rows.Count, "A").End(xlUp).Row:自动定位数据的最后一行,不用手动指定行号,适配不同数据量的表格。For i = lastRow - 1 To 1 Step -1:Step -1是反向循环的核心,让循环从倒数第二行开始,一直往上走到第一行。IsEmpty(Cells(i, "A")):如果你的空白行判断标准是其他列(比如B列),把"A"改成对应列名即可。Rows(i).Value = Rows(i + 1).Value:直接复制下一行的所有单元格内容,包括格式和数据,保证和下方行完全一致。
使用步骤
- 打开目标Excel文件,按下
Alt + F11打开VBA编辑器。 - 右键点击左侧的工作簿名称,选择「插入」→「模块」。
- 将上述代码粘贴到模块窗口中。
- 按下
F5运行代码,或点击编辑器工具栏的运行按钮。
内容的提问来源于stack exchange,提问作者Matthew O'Brien
相关产品推荐
相关产品推荐

