セル結合は、表の見た目を整えるために便利な機能です。しかし、セル結合されているデータをVBAで扱う場合は、値が消える・ソートできない・処理が止まる など、思わぬトラブルの原因にもなります。
- セルの結合・解除をコードで行いたい
- 結合セルを含むシートを安全に処理したい
- 結合セルの値が消えないように、解除後に値を復元したい
- 結合セルかどうかを判定したい
- MergeAreaで結合範囲を取得したい
- 結合セルを使わず見た目だけ整える方法を知りたい
こういった悩みをすべて解決するために、この記事では 基本から応用まで完全網羅 して解説します。
VBAでセルを結合する基本(Merge)
セルを結合する基本コードはこちらです。
' B2セルからD3セルまで を結合する
Range("B2:D3").Merge
これは Excel で一般的に使われるA1形式での範囲指定で、視覚的にも分かりやすく、初心者でも扱いやすい記法です。
結合すると複数セルの値はどうなる?
Excel では、複数セルに値が入っている状態で結合すると、左上セルの値だけが残り、他は削除されます。これはVBAでも同様ですので注意してください。

【補足】セル範囲の指定方法の違い・メリット比較
セル結合の操作はCells を使って行番号・列番号で指定する方法 でも書けます。
' B2:D3 と同じ範囲を Cells で結合
Range(Cells(2, 2), Cells(3, 4)).Merge
これは、
Cells(2,2)→ B2Cells(3,4)→ D3
という意味で、「開始セル」と「終了セル」を動的に指定できます。
① A1形式(Range(“B2:D3”))のメリット
- 視覚的に分かりやすく、可読性が高い
- 固定範囲を指定する場合に最適
- コードが短く、直感的
▶ 固定された表・テンプレートの成形にはこちらが便利
② Cells形式(Range(Cells(x,y), Cells(a,b))))のメリット
- 変数を使って範囲を動的に指定できる
- 行番号や列番号をループで動かす処理に強い
- シート構造が変わっても柔軟に対応できる
- 範囲が数式で決まるケース(最終行など)に相性が良い
例えば下記コードのように
Dim lastRow As Long
lastRow = Cells(Rows.Count, 2).End(xlUp).Row
Range(Cells(2, 2), Cells(lastRow, 4)).Merge
→ データ量に応じて結合範囲を自動で調整できる
▶「最終行を使った処理」「動的範囲」「ループ処理」と組み合わせる時に便利
セル結合を解除する(UnMerge)
結合を解除するコードはとても簡単です。
' 結合解除(結合されている範囲内のどのセルを指定してもOK)
Range("B2").UnMerge
結合範囲内であればどのセルを指定しても結合が解除されます。

セル結合を解除した結果は
- 元の結合セルの 左上セルの値 が残ります
- 結合範囲のその他のセルは 空白 になります
セルが結合されているか判定する方法(MergeCells)
MergeCells を使えば、セルが結合されているかを判定できます。
If Range("B2").MergeCells Then
MsgBox "B2 は結合セルです"
Else
MsgBox "結合していません"
End If
このコードはB2セルがセル結合されているかどうかを判定しています。この判定は、結合セルを含むシートを安全に扱う際に非常に重要なチェックです。
結合セルの範囲を取得する(MergeArea)
結合セルを扱う上で最も便利なのが MergeArea です。
指定セルが結合されている場合、その結合セル全体を 1 つの Range として扱えます。
Dim area As Range
Set area = Range("B2").MergeArea
MsgBox area.Address ' → $B$2:$D$3 のように表示
MergeAreaでできること
- 結合セルの範囲サイズを取得
- 結合セル全体に書式・値をまとめて設定
- “結合の左上セルだけを処理する” などの条件分岐
- 結合セルの前処理/後処理に活用
例:前述したMergeCells を使いセル結合の有無を判定
⇒MergeArea を使い結合されているセル範囲を取得
結合セルを扱うマクロでは 最重要プロパティです。
【実務で必須】セル結合解除後に値を自動展開するマクロ
最も需要が高いのが、こちらのマクロです。
「結合セルを解除したいが、値が空白になるのは困る」
「整形された表をデータとして使いたい」
そんな場合に役立つのが 結合解除 → 結合範囲すべてに元の値を展開 する処理です。
' 結合セルを解除し、結合範囲内のすべてのセルに元の値を設定する
Sub UnmergeAndFill()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If c.MergeCells Then
With c.MergeArea
.UnMerge
.Value = c.Value
End With
End If
Next c
End Sub
このマクロは「見た目重視で作られたExcelを、データとして使える形に直す」 場面で特に威力を発揮します。
このマクロが便利な理由は下記の通りです。
- 表形式のデータに変換する際に必須
- どんなレイアウトのシートにも対応
- 左上セルの値を結合範囲すべてに展開してくれる
- 「見出し行だけ結合されているファイル」に最適
外部からもらった Excel を処理するときの 標準テンプレ として使えます。
例えば、下の画像のようにセル結合がされている箇所を結合解除すると、右図のように空白セルができて、データとして不完全な状態になってしまいます。

しかし上記コードのマクロを実行すると、空白セルができずに各行にデータが入力されます。

このように、MergeCells やMergeArea などを組み合わせることで、データを整えることもできます。
結合セルがあるシートで安全に処理する方法
結合セルを含むシートには、次のような危険があります。
| 操作 | よくあるトラブル |
|---|---|
| コピー | 範囲外へ貼り付けるとエラー |
| ソート | 並べ替えできない |
| フィルター | 行がずれる、フィルターが機能しない |
| CSV出力 | レイアウトが崩れる |
| For Eachループ | 狙い通りに全セルを取得できない |
こうしたトラブルを避けるには、事前に結合セルを検出するのが安全です。
結合セルを検出してイミディエイトウィンドウに出力する
Sub CheckMergedCells()
Dim rng As Range
For Each rng In ActiveSheet.UsedRange
If rng.MergeCells Then
Debug.Print "結合セル → " & rng.MergeArea.Address
End If
Next rng
End Sub
結合セルがどこにあるかを洗い出すことで、「結合セルが原因で処理が止まった」というトラブルを未然に防げます。
結合セルを可視化(色づけ)して把握する
Sub HighlightMergeCells()
Dim rng As Range
For Each rng In ActiveSheet.UsedRange
If rng.MergeCells Then
rng.MergeArea.Interior.Color = RGB(255, 255, 0)
End If
Next rng
End Sub
大量の結合セルがあるシートでは、これだけで一気に状況が把握できます。
結合セルと書式設定をまとめて行う
結合セルの見た目を整える場合は、結合と書式設定をセットで行うことが多いです。
With Range("B2:D3")
.Merge
.HorizontalAlignment = xlCenter '中央揃え(横)
.VerticalAlignment = xlCenter '中央揃え(縦)
.Interior.Color = RGB(240, 240, 240) '背景色
.Borders.LineStyle = xlContinuous '罫線
End With
レポートや見出しセルの自動生成などに使えます。
【裏技】結合セルを使わずに見た目だけ整える方法
実務では、結合セルを使わずに見た目だけ整える“Center Across Selection(選択範囲内で中央)” が便利です。
メリットは以下の通りです。
- 見た目は結合セルとほぼ同じ
- ソート・フィルターが正常に動く
- データ処理の妨げにならない
- マクロとの相性が良い
With Range("B2:D2")
.HorizontalAlignment = xlCenterAcrossSelection
End With
セル結合を避けながら、見た目は整えたいという場合におすすめの方法です。
まとめ:実務でのセル結合との付き合い方
セル結合はデータの見た目を整えられたり便利な一方、実務では多くの問題を引き起こします。
- セル結合は見た目用の機能。データ加工には向かない
- マクロを使う場合はなるべく結合セルを避ける
- 必要であれば「Center Across Selection」に置き換える
- 外部ファイルを扱う時は
- 結合セルの検知
- 必要なら解除
- 値展開(UnmergeAndFill)
- 結合セルを含むシートは事前準備が重要
この記事のマクロをテンプレート化しておけば、どんな Excel ファイルにも即対応できるようになります。