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]()
[実行後]
このサンプルコードでは、セルB2が結合されているか判定するためにIf Range("B2").MergeCells Then ... Else ... End Ifとしています。
その後、結合されているか、結合されていないかをメッセージボックスで表示しています。
実行後の画像からセルが結合されているか判定したことが確認できます。
If文については、こちらで詳しく解説していますので確認してください。
VBAのIf文を使いこなそう! 条件分岐の基本をスッキリ解説
更新日 : 2019年9月26日
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でセルの結合と解除を行う機会があれば、この記事を思い出してみてください!