寻求VBA代码修改帮助:合并空白行内容至上一行后删除该行
修改建议与修正代码
先给你指出原代码里的几个关键问题:
- 工作表变量声明错误:
Dim WS As ThisWorkbook.Sheets("Data")和Set WS as Long完全不符合语法,工作表变量应声明为Worksheet类型再赋值。 - 最后一行的获取方式不够可靠,
UsedRange可能包含空行,建议用列的End(xlUp)定位更准确。 - 判断条件偏差:你需要检查A列或B列的空白,但原代码判断的是第4列(D列)。
- 缺少合并C列内容的核心逻辑,这正是你需要补充的功能。
下面是修正后的完整代码,已实现你要求的需求:
Sub MergeAndDeleteBlankRows() ' 关闭自动计算和屏幕刷新提升运行速度 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Dim WS As Worksheet Set WS = ThisWorkbook.Sheets("Data") ' 正确赋值工作表对象 Dim Lrow As Long ' 获取A列最后一行有数据的行号,比UsedRange更可靠 Lrow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row Dim i As Long ' 从最后一行往上遍历,避免删除行导致的索引混乱 For i = Lrow To 2 Step -1 ' 从第2行开始,防止i=1时越界 ' 判断当前行A列或B列是否为空 If WS.Cells(i, "A").Value = "" Or WS.Cells(i, "B").Value = "" Then ' 将当前行C列内容合并到上一行C列(可自定义分隔符,比如换行/逗号) WS.Cells(i - 1, "C").Value = WS.Cells(i - 1, "C").Value & vbNewLine & WS.Cells(i, "C").Value ' 删除当前行 WS.Rows(i).Delete End If Next i ' 恢复自动计算和屏幕刷新 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
关键细节说明:
- 遍历方向从下往上:如果从上往下删行,后续行的索引会错乱,导致漏处理,倒序遍历能避免这个问题。
- 合并内容的分隔符:代码里用了
vbNewLine(换行),你可以改成自己需要的格式,比如", "逗号加空格,或者直接拼接内容。 - 起始行设为2:避免当i=1时,i-1变成0导致单元格引用错误。
- 恢复自动计算:原代码最后误将计算模式设回手动,这里修正为自动模式,避免影响后续操作。
内容的提问来源于stack exchange,提问作者ynys
相关产品推荐
相关产品推荐

