このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2024年5月6日

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

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

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

今回は次の3つを紹介するので、セル結合に悩まされている人は読んでみてください。

  • 結合セルを取得する方法
  • 結合範囲の調べ方(行数と列数)
  • セル結合を判定する方法

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

結合セルを取得する方法 (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の開発請負を行っています。
お気軽にご相談ください。

VBA

Posted by やろまい