
VBAでExcelのマクロを作成しているんだけど、セルを結合したいところがある…。
セルを結合するVBAコードを教えて!

わかりました!
今回の内容は以下のとおりです。
- セルを結合するVBAコード
- 結合を解除するVBAコード
- 条件付きでセルを結合する方法
これらをできるだけわかりやすく解説いたします。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
VBA(Excelマクロ)でセルを結合する方法

では、Excelのセルを結合するマクロを解説いたします。
上図のセルA1とB1を結合してみましょう。
前提知識:マクロの基礎・作成から実行まで
下記のVBAコードを見てください。
Sub セルの結合()
Range("A1:B1").Merge
End Sub
これでセルの結合が行えます。

Range()の()内に結合したいセルを範囲指定してください。
あとは「.Merge」を追記して完了です。
アラート(メッセージボックス)を非表示にする方法
Excelのセルを結合するマクロを実行すると、下図のようなアラートが出る場合があります。

セルを結合したとき、消えてしまう値がある場合に発生します。
ありがたい場合もあるのですが、ちょっとうっとおしい時もあります。
そんな時は、アラートを非表示にしてみましょう。
Application.DisplayAlerts = False
上記のコードを記述することで、以降アラートは出なくなります。
しかしながら、このままでは必要なアラートも出なくなってしまいます。
そこで、結合処理が終わった段階で下記コードを差し込んでおきましょう。
Application.DisplayAlerts = True
これで、以降は通常通りアラートが出るようになります。
挿入する目安がわかりやすいように、全コードを貼っておきます。
Sub セルの結合()
Application.DisplayAlerts = False ' アラートを非表示にする
Range("A1:B1").Merge
Application.DisplayAlerts = True ' アラートを表示に戻す
End Sub
VBA(Excelマクロ)でセルの結合を解除する方法

今度は上図のようなセルの結合を解除してみましょう。
下記のVBAコードを見てください。
Sub セルの結合を解除()
Range("A1:B1").UnMerge
End Sub
セルの結合を解除するには、「Merge」ではなく、「UnMerge」と記述してください。
- Merge:セルを結合
- UnMerge:セルの結合を解除
これでセルの結合が解除されました。

Range(“A1:C1”)などと多めに指定してもエラーは出ません。
極端に言えば、A1:Z999などと指定することで、広範囲のセル結合を解除できます。
条件付きでセルを結合する方法
実践で活用できる応用例を2つ紹介いたします。
特定の列に値が無い場合にセルを結合する
まずは下図を見てください。

1行目・2行目・4行目はタイトルのように見えます。
下図のように結合されていたらわかりやすいと思いませんか?

このように、特定の列に値が無い場合のみセルを結合することができます。
下記のVBAコードを見てください。
Sub B列が空白ならAB結合()
Dim i As Long
i = 1 ' 開始行
Do While Cells(i, 1).Value <> "" ' A列が空白になるまでループ
If Cells(i, 2).Value = "" Then ' B列が空白のとき
Range(Cells(i, 1), Cells(i, 2)).Merge ' A列とB列を結合
End If
i = i + 1
Loop
End Sub
変数「i」に開始行を指定します。
開始行から下へ進んでいき、A列が空白になったら終了します。
関連記事:変数の宣言や使い方
関連記事:条件分岐(If文)
関連記事:ループ文(Do While)
特定の列に同じ値が連続する場合にセルを結合する
まずは下図を見てください。

A班がどこからどこまでなのか分かりづらいですよね。
下図のように結合されていたらわかりやすいと思いませんか?

このように同じ値が連続するセルを結合することもできます。
下記のVBAコードを見てください。
Sub A列の連続する値を結合()
Dim i As Long
Dim startRow As Long
startRow = 2 ' データの開始行
Application.DisplayAlerts = False ' アラートを非表示
Do While Cells(startRow, 1).Value <> "" ' A列が空白になるまでループ
i = startRow + 1 ' iを次の行に指定
Do While Cells(i, 1).Value = Cells(startRow, 1).Value ' 開始行と次の行が同じ値なら次の行へ
i = i + 1
Loop
If i - startRow > 1 Then
Range(Cells(startRow, 1), Cells(i - 1, 1)).Merge ' 同じ値の行をまとめて結合
End If
startRow = i
Loop
Application.DisplayAlerts = True ' アラートを表示に戻す
End Sub
こちらも変数「startRow」に開始行を指定し、A列が空白になるまでループします。
関連記事:変数の宣言や使い方
関連記事:条件分岐(If文)
関連記事:ループ文(Do While)
うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
VBA(Excelマクロ)でセルを結合・解除する方法を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!