VBAで結合セルの場所を高速に探す

結合セルを探すにはRange.MergeCellsプロパティを使う

シートのどこに結合セルがあるのかを探すにはRangeオブジェクトのMergeCellsプロパティを使います。

MergeCellsプロパティの戻り値はVariant型ですが、Trueが返ってきた場合は対象のRangeオブジェクトの範囲に結合セルが含まれていることを示します。

その機能を使って結合セルを探すコードを紹介します。

結合セルを探すコード

処理概要

アクティブシートから結合セルを探す関数です。結合セルがなくても動作します。

結合セルが見つかった場合はそのセル範囲であるAddressプロパティの値を配列に格納しています。

結合セルを探す処理

検索対象範囲は10行目のアクティブシートのUsedRangeプロパティで判定しています。

UsedRangeプロパティはシートで利用されているセル範囲を返すため、シートの全セルをチェックする必要がなくなり、高速に処理することが可能になります。

結合セルを探す処理は前半の12行目です。

ここのMergeCellsプロパティがTrueの場合はそのセル範囲に結合セルが含まれていることを意味します。

「r.MergeArea(1).Address = r.Address」の条件は結合セルのうちの先頭のセルを指しています。

この条件が無ければたとえば3つのセルを結合させている場合に、3つのセルそれぞれでMergeCellsプロパティがTrueに判定されてしまい配列にセル範囲を格納してしまいます。結合セルかどうかは1か所分かればいいためこの条件を入れて結合セルのアドレスが配列に重複して格納されないようにしています。

結合セルが見つかった場合の出力方法

19行目の配列に格納する処理のあとはどのように結合セルの場所を出力するかの処理です。3つの方法で出力しています。

20行目は結合セルのアドレスをイミディエイトウィンドウに出力しています。

31行目からは新規シートを追加してA1セルから下に向かって結合セルのアドレスを出力しています。

42行目からは配列の各要素を改行コードで連結してメッセージボックスに出力しています。

3つの出力方法のうちいらない部分はコメントアウトするなり削除するなりしてください。

使用例

以下のように3つの結合セルがあるシートがあるとします。結合セルは黄色にしています。

あとはこのシートをアクティブにして上のSearchMergeCell関数を実行するだけです。

実行後に以下の3つが出力されます。

イミディエイトウィンドウ

新規追加シート

メッセージボックス

関連記事

サブコンテンツ

このページの先頭へ