Excel VBA 逆引き集 | 結合を解除

Excel VBA
スポンサーリンク

結合を解除

見出しの整形や過去の手作業で増えた「結合セル」を、事故なく一括解除するための最短コードと安全テンプレートをまとめます。基本は Range.UnMerge(範囲の結合解除)、状態確認は MergeCells、結合の塊は MergeArea で扱います。


基本:結合解除の最短コード

Sub UnmergeBasic()
    '単一範囲を解除
    Range("A1:B1").UnMerge
End Sub
VB
  • ポイント: 最短: 指定範囲の結合を解除するだけなら UnMerge 1行で完了。結合セルの判定は MergeCells、結合ブロック全体は MergeArea で取得できます。

シート/ブック全体を一括で解除

Sub UnmergeWholeSheet()
    'シート内の使用中セルだけ一括解除(安全)
    ActiveSheet.UsedRange.UnMerge
End Sub

Sub UnmergeAllSheetsInWorkbook()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.UsedRange.UnMerge
    Next
End Sub
VB
  • ポイント: UsedRangeで限定: データがある範囲に絞って解除でき、不要な上書きを避けられます。シート全体/全シートの一括解除も同じ発想です。

列・行・選択範囲だけ解除

Sub UnmergeColumn()
    'A列の結合をすべて解除
    Columns("A").UnMerge
End Sub

Sub UnmergeRow()
    '3行目の結合をすべて解除
    Rows(3).UnMerge
End Sub

Sub UnmergeSelection()
    If TypeName(Selection) = "Range" Then
        Selection.UnMerge
    End If
End Sub
VB
  • ポイント: 部分適用: 列や行、選択されたブロックだけに限定して解除できます。Range.UnMerge は複数セル・複数範囲にも使えます。

値の保全:解除前に結合範囲へ値を配ってから解除

Sub UnmergePreserveValues()
    Dim cell As Range, area As Range
    '対象表(見出し込み)
    For Each cell In Range("A1").CurrentRegion
        If cell.MergeCells Then
            Set area = cell.MergeArea
            '左上セルの値を結合範囲の全セルへコピーしてから解除
            area.Value = area.Cells(1, 1).Value
            area.UnMerge
        End If
    Next
End Sub
VB
  • ポイント: 左上に集約される仕様: 結合は左上セルの値だけ残し、他セルは失われます。解除前に結合範囲へ値を配っておくと、値の“空白化”を防げます。結合判定は MergeCells、塊取得は MergeArea が便利です。

例題で練習

例題1:使用セルだけ一括解除(提出前の整形)

Sub Example_UnmergeUsedRange()
    With ActiveSheet.UsedRange
        .UnMerge
    End With
End Sub
VB

例題2:A列の結合解除+中央揃えで見た目保持

Sub Example_UnmergeColumnWithFormat()
    Columns("A").UnMerge
    Columns("A").HorizontalAlignment = xlCenter
End Sub
VB

例題3:結合セルを検出→薄黄色でハイライトしてから解除

Sub Example_HighlightThenUnmerge()
    Dim cell As Range
    For Each cell In Range("A1").CurrentRegion
        If cell.MergeCells Then
            cell.MergeArea.Interior.Color = RGB(255, 242, 204)
            cell.MergeArea.UnMerge
        End If
    Next
End Sub
VB

実務の落とし穴と対策

  • 値の消失:
    • 対策: 解除前に MergeArea.Value = 左上値 で全セルに値を配ると、解除後も欠損が出ません。
  • 解除しすぎ/誤範囲:
    • 対策: UsedRange や列・行・選択を使って対象を限定する。全シート一括時も UsedRange.UnMerge を基本に。
  • 結合検知の見落とし:
    • 対策: MergeCells で判定、MergeArea でブロック単位の処理を徹底。
  • 後工程との相性:
    • 対策: 並べ替え・フィルタ・集計に備えて、データ部は原則“非結合”に統一。見出しは結合なしでも中央揃えで代替可能。
タイトルとURLをコピーしました