You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:35:24