【VBA】セル結合の結合範囲を調べる方法(行数と列数)
セルが結合されていて、マクロがちゃんと動かない
こんな悩みを持っていませんか?
セル結合がある場合でも、結合範囲の調べ方を知っていれば正常動作させるプログラムが書けます。
今回は次の3つを紹介するので、セル結合に悩まされている人は読んでみてください。
- 結合セルを取得する方法
- 結合範囲の調べ方(行数と列数)
- セル結合を判定する方法
結合セルを取得する方法 (MergeAreaプロパティ)
MsgBox Range("A1").MergeArea.Address
MergeAreaプロパティは結合されているセルをRangeオブジェクトで返してくれます。
例えば、A1:C3のセルが結合されている状態で、Range(“A1").MergeAreaとするとRange(“A1:C3")と同じRangeオブジェクトを得られます。
上のサンプルコードではA1セルが結合されているセルの範囲のアドレスをメッセージで表示します。
(A1:C3のセルが結合されていると、$A$1:$C$3のメッセージが出ます)
結合範囲の調べ方(行数と列数)
結合セルの行や列を調べたい場合は、MergeCellsプロパティにItemプロパティを組み合わせて使います。
ItemプロパティはRangeオブジェクト内の1つのセルを取り出すために使います。
例えば、Range(“A1:C3")に対してItemプロパティを使うと、次のようにセルを取り出せます。
- Range(“A1:C3").Item(1)ではA1セル
- Range(“A1:C3").Item(9)ではC3セル
- 他は上の画像を見てね
そして、一番最後のセルはCountプロパティを使うことで次のように書けます。
Range("A1:C3").Item(Range("A1:C3").Count)
CountプロパティはRangeオブジェクトのセルの数を返すプロパティです。Range(“A1:C3")はセルが9個なので9が返されます。
これを使えば、セルの数に関係なく、右下のセルを取得することができます。
左上のセルはItem(1)で取得できるので、結合セルの行と列は次のように調べることができます。
With Range("A1").MergeArea
MsgBox .Item(1).Row '一番上の行
MsgBox .Item(1).Column '一番左の列
MsgBox .Item(.count).Row '一番下の行
MsgBox .Item(.count).Column '一番右の列
End With
セル結合を判定する方法(MergeCellsプロパティ)
If Range("A1").MergeCells Then MsgBox "A1セルは結合されている"
セルが結合されているかどうかはMergeCellsプロパティを用いて判定します。
MergeCellsプロパティはRangeオブジェクトのプロパティで、結合セルの場合にTrueを返します。
上のサンプルコードではA1セルが結合されているとTrueとなり、メッセージが表示されます。
このプロパティでセル結合を判定して、セル結合専用の処理を実行しましょう。