HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > 【Excel VBA】セルを結合/解除する(Merge/UnMergeメソッド)

【Excel VBA】セルを結合/解除する(Merge/UnMergeメソッド)|Excel VBA

セル操作関連のテクニック

【Excel VBA】セルを結合/解除する(Merge/UnMergeメソッド)

Excelでのセルの結合処理は、手作業ではミスが起きやすく、作業効率に影響する部分です。例えば、見出し行を行単位で結合するケースや、レポート出力時に結合セルを解除して整形するケースなどがあります。
「セルの結合ってVBAでどうやるの?」と疑問に思ったことがある方に向けて、この記事ではMergeメソッドとUnMergeメソッドの使い方を詳しく解説します。VBAによるセル操作をマスターして、業務の自動化と効率化を目指しましょう。

セルを結合する(Mergeメソッド)

セルを結合するには、RangeオブジェクトのMergeメソッドを使います。

Mergeメソッドの基本構文

Mergeメソッドの構文は次のとおりです。

セル範囲.Merge [Across]

Mergeメソッドの使い方

例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

セルの結合を解除する(UnMergeメソッド)

結合したセルを解除するには、RangeオブジェクトのUnMergeメソッドを使います。

UnMergeメソッドの基本構文

UnMergeメソッドの構文は次のとおりです。

結合を解除したいセル.UnMerge

Mergeメソッドと異なり、引数Acrossはありません。
このとき、結合されているセルの中の「任意の1つ以上のセル」を指定すれば結合セルを解除できます。逆に、結合セルの中の一部だけを解除することはできません。

UnMergeメソッドの使い方

例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

確認メッセージが表示されずに、セルが結合されました。

【方法A】エラーを無視して処理を継続する

値が入力されたセルが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

「Excel VBA」の即効テクニック人気記事