入力セル範囲にアクティブセルが含まれるか判定するには

入力セル範囲にアクティブセルが含まれるか判定が必要な場合があります。例えばアクティブセルが基点のなって入力セル範囲の各セルを1つずつ処理するような場合です。

シートの入力セル範囲はUsedRangeプロパティで取得することが出来ます。その中にアクティブセルが含まれているのか確認するにはAddressプロパティを利用します。

方法として2通りのコードを紹介します。

1つは単純に入力セル範囲の1セルずつAddressプロパティを見てActiveCellのAddressと同じかを判定する方法です。入力セル範囲が広くなるほど判定に時間が掛かる欠点があります。

もう1つは入力セル範囲の上下左右の座標内にActiveCellが含まれるかを判定する方法で、こちらの処理速度は常に一定で高速です。

1. 入力セル範囲を1セルずつ判定する方法

入力セル範囲を1セルずつループして、アクティブセルと同じアドレスかどうかを判定する方法です。

処理が簡単なためコードは短いですが、入力セル範囲が広くなるとそれだけループ回数が増えることになります。

ただ、Windows7以降のPCであればCPUが高速なためこちらの処理方式でも問題ない場合がほとんどと思われます。

テストコード

上の関数のテストコードです。

以下の図は入力セル範囲が赤枠内になります。そのため、アクティブセルが赤枠内にあればTrueが返り、赤枠の外にあればFalseが返ります。

2. 高速に入力セル範囲にアクティブセルが含まれるか判定する方法

高速にアクティブセルが入力セル範囲に含まれるか判定する関数です。

Addressプロパティの値をR1C1形式で取得すると「R1C1:R5C8」のような値になります。

それをコロンで分割し、開始セルと終了セルに分けて、さらにそれぞれの行と列を取得し、その範囲にアクティブセルの行と列が含まれるかを判定しています。

それらの分割処理でコードが長くなりますが、入力セル範囲に関係なく処理されますので処理速度は常に一定です。

使い方は上のコードと同じため省略します。