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

如何修改VBA脚本的Range范围设置 预设单元格范围自动取消合并

问题原因

你修改后的脚本无法生效主要有两个问题:

  • 缺少WorkRng变量的显式声明,VBA未开启强制变量声明时可能出现变量识别异常
  • 没有明确指定Range所属的工作表,默认会指向运行时激活的工作表,若激活表非目标表就不会有预期效果

修正后的可用脚本

根据你不同的预设范围需求,可选择对应版本:

场景1:固定处理当前工作表第1-8行

Sub UnMergeSameCell()
Dim Rng As Range, WorkRng As Range
' 明确指定处理当前工作表的第1到8行
Set WorkRng = ThisWorkbook.ActiveSheet.Range("1:8")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each Rng In WorkRng
    If Rng.MergeCells Then
        With Rng.MergeArea
            .UnMerge
            .Formula = Rng.Formula
        End With
    End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

场景2:自动处理当前工作表所有已使用的单元格(通用推荐,无需手动指定行号列号)

Sub UnMergeSameCell()
Dim Rng As Range, WorkRng As Range
' 自动获取当前工作表所有已使用的区域作为处理范围
Set WorkRng = ThisWorkbook.ActiveSheet.UsedRange
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each Rng In WorkRng
    If Rng.MergeCells Then
        With Rng.MergeArea
            .UnMerge
            .Formula = Rng.Formula
        End With
    End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

场景3:处理当前工作表所有单元格(全表范围)

Sub UnMergeSameCell()
Dim Rng As Range, WorkRng As Range
' 选中当前工作表全部单元格作为处理范围
Set WorkRng = ThisWorkbook.ActiveSheet.Cells
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each Rng In WorkRng
    If Rng.MergeCells Then
        With Rng.MergeArea
            .UnMerge
            .Formula = Rng.Formula
        End With
    End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

如果需要指定特定工作表而非当前激活的工作表,把代码中的ActiveSheet改成Sheets("你的目标工作表名称")即可,例如Set WorkRng = ThisWorkbook.Sheets("数据汇总表").UsedRange。

内容的提问来源于stack exchange,提问作者Mitch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:24:03