如何使用VBA实现Excel列空白单元格按前序非空值顺延填充
错误原因
- 首段代码固定取B2的值作为填充内容,没有在遇到B列下一个非空值时更新填充基准,因此只能填充第一块空白区域。
- 第二段代码中
i = ActiveCell是将单元格的内容赋值给变量i,而非单元格行号,后续调用Range("C" & i)时i不是有效行号,因此触发1004报错。 - 原有判断
InStr(1, Range("C" & i), "")逻辑无效:任何单元格内容都包含空字符串,该判断永远返回真,无法实现预期的判断逻辑。
正确实现代码
Sub 填充B列空白() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim 当前填充值 As String ' 绑定操作的工作表,也可替换为表名:Set ws = ThisWorkbook.Sheets("你的工作表名") Set ws = ThisWorkbook.Sheets(2) ' 读取C列最后一行有数据的行号,避免遍历无效行 lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' 从第2行开始遍历,可根据实际表头行调整起始值 For i = 2 To lastRow ' B列当前行有值时更新填充基准 If Not IsEmpty(ws.Range("B" & i)) Then 当前填充值 = ws.Range("B" & i).Value Else ' B列为空时用基准值填充 ws.Range("B" & i).Value = 当前填充值 End If Next i ' 如需删除C列为空的行,取消下面这段的注释即可 ' For i = lastRow To 2 Step -1 ' If IsEmpty(ws.Range("C" & i)) Then ' ws.Rows(i).Delete ' End If ' Next i End Sub
代码说明
- 全程直接操作工作表对象,无需选中单元格/工作表,运行更稳定不会和用户当前操作冲突
- 先定位C列最后一行有效数据,避免出现无限循环或者漏处理的情况
- 遍历过程自动更新填充基准值,适配B列非空值位置、数量不固定的场景
- 可选的删空行逻辑采用倒序遍历,不会出现删行后漏行的问题
内容的提问来源于stack exchange,提问作者MaxWork
相关产品推荐
相关产品推荐

