【Excel VBA】セルを結合/解除する(Merge/UnMergeメソッド)|Excel VBA |
Excelでのセルの結合処理は、手作業ではミスが起きやすく、作業効率に影響する部分です。例えば、見出し行を行単位で結合するケースや、レポート出力時に結合セルを解除して整形するケースなどがあります。
「セルの結合ってVBAでどうやるの?」と疑問に思ったことがある方に向けて、この記事ではMergeメソッドとUnMergeメソッドの使い方を詳しく解説します。VBAによるセル操作をマスターして、業務の自動化と効率化を目指しましょう。
セルを結合するには、RangeオブジェクトのMergeメソッドを使います。
Mergeメソッドの構文は次のとおりです。
セル範囲.Merge [Across]
例1:セル範囲A1:C3を結合します。
Sub Merge1()
Range("A1:C3").Merge
End Sub
セル範囲は、Cellsプロパティを組み合わせることもできます。
例2:セル範囲A1:C3を結合します。
Sub Merge2()
Range(Cells(1,1), Cells(3,3)).Merge
End Sub
選択範囲を行ごとに結合することもできます。行ごとに結合するには、Mergeメソッドの引数[Across]にTrueを設定します。
例3:セル範囲A1:C1、A2:C2、A3:C3を行ごとに結合して3つの結合セルを作成します。
Sub Merge3()
Range("A1:C3").Merge True
End Sub

結合したセルを解除するには、RangeオブジェクトのUnMergeメソッドを使います。
UnMergeメソッドの構文は次のとおりです。
結合を解除したいセル.UnMerge
Mergeメソッドと異なり、引数Acrossはありません。
このとき、結合されているセルの中の「任意の1つ以上のセル」を指定すれば結合セルを解除できます。逆に、結合セルの中の一部だけを解除することはできません。
例4:結合されているセル範囲A1:C3の結合を解除します。
Sub Merge4()
Range("A1").UnMerge
End Sub
結合対象のセル範囲の中に値が入力されたセルが2つ以上あると、通常のExcel操作と同様にデータを失うことになるので注意が必要です。Excel VBAで実行した場合は、確認メッセージが表示されたあとに[キャンセル]ボタンをクリックすると、エラーが表示されて処理が止まってしまいます。


[キャンセル]ボタンをクリックしても処理を中断しないようにするには、確認メッセージを非表示にしたり、エラーを無視して処理を続けたりする方法があります。2つの方法を紹介します。
値が入力されたセルが2つ以上あっても、確認メッセージを非表示にしたうえで、確認メッセージを無視して結合します。結合が終わったあとは確認メッセージを再表示させます。
確認メッセージを非表示にするには、Application.DisplayAlertsを使用します。
※Application.DisplayAlertsについての詳細は「【Excel VBA】確認メッセージを非表示にする(DisplayAlertsプロパティ)」を参照してください。
例5:セル範囲A1:C3を結合します。
Sub Merge5()
Application.DisplayAlerts = False
Range("A1:C3").Merge
Application.DisplayAlerts = True
End Sub
確認メッセージが表示されずに、セルが結合されました。

値が入力されたセルが2つ以上あった場合でも、エラーが発生する可能性に備えて、事前に On Error Resume Next を記述しておくことで、実行時エラーが発生しても処理を中断せずに次のステートメントへ進むことができます。
※ On Error Resume Next ステートメントは、エラーを無視して処理を継続するための命令です。これにより、結合処理中に予期せぬエラーが起きても、プログラムが止まることなく続行できます。
例6:セル範囲 A1:C3 を結合します。
Sub Merge6()
On Error Resume Next
Range("A1:C3").Merge
End Sub
確認メッセージが表示されますが、[キャンセル]ボタンをクリックしても、実行時エラーが表示されることなく、セルが統合されます。


RangeオブジェクトのMergeCellsプロパティでセルを結合することもできます。
MergeCellsプロパティにTrueを設定すると結合し、Falseを設定すると結合を解除します。
解除するときに、結合セルの中の任意のセルを1つ以上指定すればよい点もUnMergeメソッドと同じです。
例7:セル範囲A1:C3を結合後に、結合を解除します。
Sub Merge7()
Range("A1:C3").MergeCells = True
Range("A1").MergeCells = False
End Sub