VBAでセルを結合する方法についてご説明します。シートの体裁を整えるのに大変便利なセルの結合機能ですが、VBAではどのように扱えば良いのでしょうか。以下、具体的な手順について解説します。
セルの結合
セルを結合するときは対象となるセルをRangeで指定してからMergeを実行します。
<結合前>
<コード>
'A1~G1セルを結合' Range("A1:G1").Merge '文字を中央に揃える' Range("A1").HorizontalAlignment = xlCenter
<結合後>
セルを結合することでタイトル「年間集計」を見やすくしました。
セルの結合解除
結合を解除する場合はUnMergeを実行します。
<コード>
'A1~G1セルを結合解除' Range("A1:G1").UnMerge
<実行後>
タイトル「年間集計」が結合前の状態に戻ります。(セルの色は変更されない)
セルが結合されているかどうか確認
シート内のどのセルが結合されているか分からない場合、セルのコピーや集計がうまくいかず、思い通りの結果が得られないということがあります。
そんな時は事前に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
<実行後>
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でセルを結合(解除)するにあたり、事前に対象となるセルが結合されているのかどうかステータスを確認しておきましょう。時に扱いづらいセルの結合ですが、手順を踏んで処理すれば安心ですね。