📊 Excel VBA Top100
🎨

UnmergeCellsFormatting

書式設定

選択範囲の結合セルを解除し、各セルに値を複製します

選択した範囲内のすべての結合セルを解除するマクロです。結合セルが含まれるとソート・フィルター・コピー&ペーストなどの操作に制限が生じますが、このマクロで結合を解除することでこれらの制限を解消できます。Excelの「セルの結合と中央揃え」ボタンと同じ処理をVBAで自動化しており、多数の結合セルを一括で解除できます。データ操作用とレイアウト用でシートを分けて管理する際の準備処理としても活躍します。内部ではRange.UnMergeメソッドを選択範囲内のすべての結合セルに適用しており、MergeCellsFormattingで作成した結合を元に戻す対の関係にあります。結合解除後は左上セルの値のみが残るため、必要に応じてFillBlankCellsで空白になった残りのセルを補完すると、データベース形式として扱いやすい表に整えられます。

UnmergeCellsFormatting デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 対象範囲を選択してから UnmergeCellsFormatting を実行します

🎯 活用シーン

  • ✓結合セルが多数含まれる表をソートやフィルタリングできるように変換するために、結合を解除して通常の範囲に戻したいとき
  • ✓複数シートのデータを統合する前処理として、各シートの結合セルを一括解除してデータを扱いやすくしたいとき
  • ✓テンプレートから作成した帳票の結合セルを解除して、データベースにインポートできる形式に変換したいとき
  • ✓見た目重視で作られた帳票をデータベース形式に変換し、集計・分析に使えるようにしたいとき
  • ✓他部署から受け取った結合セルだらけの表を、ソートやフィルターが使える通常のデータ表に直したいとき

💡 実装のヒント

  • ▸結合解除後は、結合の左上セルにあった値のみが残り、他のセルは空白になります。必要なデータが上書きされていないか事前に確認してください。
  • ▸結合セルを解除した後にFillBlankCellsを実行すると、解除後の空白セルを上の値で埋めることができます。
  • ▸「セルを結合して中央揃え」でなく「横方向に結合」で結合されたセルも同じ方法で解除できます。
  • ▸結合解除前にどのセルに値が入っているか確認しておくと、想定外のデータ消失を防げます。
  • ▸ピボットテーブルの元データとして使う場合は、結合セルを事前にすべて解除しておく必要があります。

💻 VBAコード

' UnmergeCellsFormatting
' -----------------
' Macro Name: UnmergeCellsFormatting
' Description: 選択範囲の結合セルを解除し、各セルに値を複製します
' Parameters: なし
' Returns: なし
' Usage: 対象範囲を選択してから UnmergeCellsFormatting を実行します
' -----------------

Sub UnmergeCellsFormatting()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range
    Dim mergedArea As Range
    Dim mergedValue As Variant

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection

    For Each cell In rng
        If cell.MergeCells Then
            Set mergedArea = cell.MergeArea
            mergedValue = mergedArea.Cells(1, 1).Value
            mergedArea.UnMerge
            mergedArea.Value = mergedValue
        End If
    Next cell

    MsgBox "セルの結合を解除しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub