【VBA】セル結合の結合範囲を調べる方法(行数と列数)

2021年12月2日

セルが結合されていて、マクロがちゃんと動かない

こんな悩みを持っていませんか?

セル結合がある場合でも、結合範囲の調べ方を知っていれば正常動作させるプログラムが書けます。

今回は次の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となり、メッセージが表示されます。

このプロパティでセル結合を判定して、セル結合専用の処理を実行しましょう。

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/07/01 11:26:51時点 Amazon調べ-詳細)

《マクロ作成に困ったら》
自分で作るのが難しいと感じたら、プロに作ってもらう手もあります。
マクロ(VBA)の依頼におすすめのプログラマーを紹介の記事をご覧ください。

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい