【VBA入門】セルの結合と解除(Merge、UnMerge、MergeCells)

ExcelVBAでは、Merge・UnMerge・MergeCellsを使用してセルの結合と解除を行うことができます。

この記事では、セルの結合と解除について

・セルの結合とは
・セルを結合、解除する方法

といった基本的な内容から

・結合したセルの値を取得する方法
・セルが結合されているかを判定する方法

など応用的な使い方についても解説していきます。

Excelでは、見栄えを理由にセルを結合することがしばしばあります。

ExcelVBAから結合されたセルを扱うこともあります。

そのようなときのために、例を交えながら詳しく解説していきます。

目次

セルの結合とは

Excelでは、セルを結合することができます。

セルを結合するためには、次の画像のようにセルを選択した状態で、ツールバーからセルの結合を選択します。

vba_merge_cell11

結合されたセルは、次の画像のように表示されます。

vba_merge_cell12

また、Excelではセルの結合を解除することができます。

セルの結合を解除するためには、次の画像のようにセルを選択した状態で、ツールバーからセル結合の解除を選択します。

vba_merge_cell13

結合が解除されたセルは、次の画像のように表示されます。

vba_merge_cell14

セルを結合、解除する方法

ExcelVBAでは、セルの結合と解除を行うことができます。

Mergeでセルを結合する方法

Mergeメソッドでセルを結合するためには、次のように記述します。

Range("開始セル:終了セル").Merge

開始セルは範囲の一番左上のセルで、終了セルは範囲の一番右下のセルです。

次の画像のような場合、開始セルがB2になり、終了セルがD3になります。

vba_merge_cell98 0

次のサンプルコードでは、セルB2からセルD3までの範囲を結合するためRange("B2:D3").Mergeとしています。

Sub Sample()
    Range("B2:D3").Merge
End Sub

[実行結果]

vba_merge_cell22

実行結果の画像のセルB2からセルD3までの範囲が結合されていることが確認できます。

1行ずつまとめて結合する方法

Mergeメソッドは引数にTrueもしくはFalseを指定することができます。

Trueを指定した場合はセル範囲を行ごとに結合することができます。

指定を省略した場合の既定値はFalseです。

引数をTrueで指定した場合について、サンプルコードで確認しましょう。

Sub Sample()
    Range("B2:D3").Merge True
End Sub

[実行結果]

vba_merge01

UnMergeでセルの結合を解除する方法

UnMergeメソッドでセルの結合を解除するためには、次のように記述します。

Range("開始セル:終了セル").UnMerge

次のサンプルコードでは、セルB2からセルD3までの範囲の結合を解除するためRange("B2:D3").UnMergeとしています。

Sub Sample()
    Range("B2:D3").UnMerge
End Sub

[実行結果]

vba_merge_cell23

実行結果の画像のセルB2からセルD3までの範囲の結合が解除されていることが確認できます。

MergeCellsでセルを結合、解除する方法

次のサンプルコードでは、セルB2からセルD3までの範囲を結合するためRange("B2:D3").MergeCells = Trueとしています。

Sub Sample()
    Range("B2:D3").MergeCells = True
End Sub

[実行結果]

vba_merge_cell22

実行結果の画像のセルB2からセルD3までの範囲が結合されていることが確認できます。

次のサンプルコードでは、セルB2からセルD3までの範囲の結合を解除するためRange("B2:D3").MergeCells = Falseとしています。

Sub Sample()
    Range("B2:D3").MergeCells = False
End Sub

[実行結果]

vba_merge_cell23

実行結果の画像のセルB2からセルD3までの範囲の結合が解除されていることが確認できます。

このようにMergeCellsプロパティTrueを指定するとセルの結合を行うことができます。

また、Falseを指定するとセルの結合の解除を行うことができます。

結合したセルの値を取得する方法

セルの値を取得するためには、Valueプロパティを使用します。

Range("セル名").Value

例えば、次の画像のような年月を含む表があるとします。

vba_merge_cell31

次のサンプルコードでは、セルB3の値を取得するためにv = Range("B3").Valueとしています。

Sub Sample()
    Dim v
    v = Range("B3").Value
    Range("E3").Value = v
End Sub

[実行結果]

vba_merge_cell32

次のサンプルコードでは、セルB4の値を取得するためにv = Range("B4").Valueとしています。

Sub Sample()
    Dim v
    v = Range("B4").Value
    Range("E4").Value = v
End Sub

[実行結果]

vba_merge_cell31

実行結果の2つの画像を比較すると2番目のサンプルだけ値が設定されていません。

これは結合したセルでは、先頭のセルだけが値を持つためです。

そこで、結合したセルの値を取得するために、次の通りMergeAreaプロパティを使用します。

Sub Sample()
    Dim v
    v = Range("B4").MergeArea(1, 1).Value
    Range("E4").Value = v
End Sub

[実行結果]

vba_merge_cell33

実行結果の画像から結合されたセルの値が取得されたことが確認できます。

セルが結合されているかを判定する方法

MergeCellsでセルが結合されているかを判定する方法

次のようにMergeCellsプロパティでセルが結合されているかを判定することができます。

Sub Sample()
    If Range("B2").MergeCells Then
        MsgBox("結合されている。")
    Else
        MsgBox("結合されていない。")
    End If
End Sub

[実行前]
vba_merge_cell22

[実行後]
vba_merge_cell41

このサンプルコードでは、セルB2が結合されているか判定するためにIf Range("B2").MergeCells Then … Else … End Ifとしています。

その後、結合されているか、結合されていないかをメッセージボックスで表示しています。

実行後の画像からセルが結合されているか判定したことが確認できます。

If文については、こちらで詳しく解説していますので確認してください。

MergeAreaで結合しているセルの範囲を取得する方法

MergeAreaプロパティで結合しているセルの範囲を取得するためには、次のように記述します。

Range("セル名").MergeArea

次のサンプルコードでは、セルB2の結合している範囲を取得するため、mArea = Range("B2").MergeAreaとしています。

Sub Sample()
    Dim mArea As Range
    Set mArea = Range("B2").MergeArea
    mArea.Select
End Sub

[実行前]

vba_merge_cell22

[実行後]

vba_merge_cell72

確認の為に、mArea.Selectで結合されたセルを選択しています。

実行後の画像から、セルB2の結合している範囲が取得されていることが確認できます。

まとめ

いかがでしたか?

今回は、セルの結合と解除について解説しました。

Excelで見栄えを整えるのは時間がかかりますので、ExcelVBAで自動化してみるのもいいですね。

もし、ExcelVBAでセルの結合と解除を行う機会があれば、この記事を思い出してみてください!

この記事を書いた人

フリーランスのエンジニアです。
最近では、プログラミング関連の記事を作成するライターとしても活動しています。

趣味と業務の両方でプログラミング言語をいくつも学んできたので
その経験を活かして分かりやすい記事を作成できればと考えています。

目次