VBA セルを結合する (Range.Marge)

はじめに

Excel VBA マクロでセルを結合したり解除する方法を紹介します。

Range("A1:B1").Merge メソッドから、セルの範囲「A1」~「B1」を結合できます。

UnMerge メソッドから、セルの結合を解除できます。

MergeCells プロパティから、セルが結合しているか判定できます。

セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • セルを結合する
    • セルの結合を解除する
    • セルが結合されているか判定する
    • 別シートのセルを結合する

セルを結合する

Range の引数にセル名を指定すると、そのセルの範囲を結合できます。

セルの範囲「A1」~「B2」を結合するには Range("A1:B2").Merge を入力します。

Range("A1:B2").Merge
3

Marge の引数に True を指定すると、行単位で結合できます。

Call Range("A1:B2").Merge(True)
1

MergeCells プロパティに True を指定しても結合できます。

Range("A1:B2").MergeCells = True

どの方法でも、結合するセルに違う値が入っているときはメッセージが表示されます。

4

これを表示させないためには Application.DisplayAlerts = False を入力します。結合したら True に戻します。

Application.DisplayAlerts = False ' メッセージを非表示
Range("A1:B2").Merge
Application.DisplayAlerts = True  ' メッセージを表示

セルの結合を解除する

セルの範囲「A1」~「B2」の結合を解除するには Range("A1").UnMerge または Range("A1:B2").UnMerge を入力します。

MergeCells プロパティに False を指定しても結合を解除できます。

Range("A1").UnMerge    ' A1 ~ B2 の結合が解除される
Range("A2").UnMerge    ' A1 ~ B2 の結合が解除される
Range("B1").UnMerge    ' A1 ~ B2 の結合が解除される
Range("B2").UnMerge    ' A1 ~ B2 の結合が解除される
Range("A1:B2").UnMerge ' A1 ~ B2 の結合が解除される

Range("A1").MergeCells = False    ' A1 ~ B2 の結合が解除される
Range("A1:B2").MergeCells = False ' A1 ~ B2 の結合が解除される
1

指定したセルの範囲内に含まれている結合されたセルをすべて解除できます。

シート全体のセル結合を解除

シート全体のセル結合を解除するには Cells.UnMerge を入力します。

Cells.UnMerge ' シート全体の結合が解除される

セルが結合されているか判定する

MergeCells が True のときは、そのセルは結合されています。

MergeArea から結合されている範囲を取得できます。

Dim c As Range

If Range("A1").MergeCells = True Then
    Debug.Print("結合されています。")

    Set c = Range("A1").MergeArea ' 結合範囲を取得
    Debug.Print(c.Address)
Else
    Debug.Print("通常のセルです。")
End If

別シートのセルを結合する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 のセル「A1」~「B2」を結合
Worksheets("Sheet1").Range("A1:B2").Merge
Worksheets(1).Range("A1:B2").Merge

' Sheet2 のセル「A1」~「B2」を結合
Worksheets("Sheet2").Range("A1:B2").Merge
Worksheets(2).Range("A1:B2").Merge

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"