VBAでセルを結合する方法についてご説明します。シートの体裁を整えるのに大変便利なセルの結合機能ですが、VBAではどのように扱えば良いのでしょうか。以下、具体的な手順について解説します。

セルの結合

セルを結合するときは対象となるセルをRangeで指定してからMergeを実行します。
<結合前>
【VBA入門】セルを結合する方法
<コード>

'A1~G1セルを結合'
Range("A1:G1").Merge
'文字を中央に揃える'
Range("A1").HorizontalAlignment = xlCenter

<結合後>
【VBA入門】セルを結合する方法
セルを結合することでタイトル「年間集計」を見やすくしました。

セルの結合解除

結合を解除する場合はUnMergeを実行します。
<コード>

'A1~G1セルを結合解除'
Range("A1:G1").UnMerge

<実行後>
【VBA入門】セルを結合する方法
タイトル「年間集計」が結合前の状態に戻ります。(セルの色は変更されない)

セルが結合されているかどうか確認

シート内のどのセルが結合されているか分からない場合、セルのコピーや集計がうまくいかず、思い通りの結果が得られないということがあります。
そんな時は事前にVBAでどのセルが結合されているかチェックしておくと安心ですね。

任意のセルが結合されているかどうかを確認

MergeCellsは指定したセルが結合されているとtrueを返します。これを利用してif文と組み合わせると任意のセルの結合チェックができます。
<コード>

Dim i As integer
For i = 4 To 10 '4行目~10行目までのA列の結合範囲チェック'
        If Range("A" & i).MergeCells Then
       Range("D" & i) = "結合されています"
    Else
       Range("D" & i) = "結合されていません"
    End If
Next i

<実行後>
【VBA入門】セルを結合する方法
A列が結合されているかどうかをMergeCellsでD列に一覧表示します。

結合セルに含まれているセルの範囲情報を取得

MergeAreaは指定したセルが含まれているセルの範囲情報(Rangeオブジェクト)を返します。このRangeオブジェクトから先ほどの表を使って、どの範囲のセルが結合されているか確認してみましょう。
ちなみに、MergeAreaは結合されていないセルを指定してもエラーにはなりません。
<コード>

Dim i As integer
For i = 4 To 10 '4行目~10行目までのA列の結合範囲チェック'
    With Range("A" & i).MergeArea
         Range("D" & i) = .Rows.Count '行数'
         Range("E" & i) = .Coulumns.Count '列数'
         Range("F" & i) = .Item(1).Address '左上座標'
         Range("G" & i) = .Item(.Count).Address '右上座標'
    End With
Next i

<実行後>
【VBA入門】セルを結合する方法

まとめ

VBAでセルを結合(解除)するにあたり、事前に対象となるセルが結合されているのかどうかステータスを確認しておきましょう。時に扱いづらいセルの結合ですが、手順を踏んで処理すれば安心ですね。