【Excelマクロ】VBAでセルを結合・解除する方法【条件付き結合も解説】

スポンサードリンク
VBA
過去の自分
過去の自分

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

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

結合後のイメージ1

このように、特定の列に値が無い場合のみセルを結合することができます。
下記の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)

特定の列に同じ値が連続する場合にセルを結合する

まずは下図を見てください。

元データ2

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

結合後のイメージ2

このように同じ値が連続するセルを結合することもできます。
下記の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など、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました