これまでは、条件に当てはまるセルがあるかどうかを検索する為に、Findメソッドを利用していました。

例えば、ある表の列にデータナンバーが入っていて、その列に検索したいデータナンバーがあるかどうかを調べる時など。

ところが、その表にオートフィルターを使用してしまうと、非表示になったセルに含まれるデータナンバーは、Findメソッドでは検索されないという問題が発生しました。

使用しているデータナンバーの最大値を調べる為、ワークシート関数も使用していましたが、こちらは非表示セルがあっても問題なく正しい結果が表示されています。ワークシート関数なら大丈夫なようです。


今回は、あるデータナンバーを検索し、そのセル番地を知りたいのではなく、既に使用しているかデータナンバーかどうかを調べたかったので、Findメソッドの使用は中止し、ワークシート関数の COUNTIFを使ってみました。

COUNTIF関数は、条件を満たすセルの個数を求める時に使用できます。つまり、検索したいデータナンバーが0にならなければ、既に使用しているナンバーという判断が可能になります。

WorksheetFunction.CountIf(Range("C:C"), lngNumb) = 0

となれば、使用されていないデータナンバーであることが判定できます。(lngNumbは、検索したい数値が入っている変数です)


セル番地まで調べたい場合は、非表示セルも含めたコピー方法で表を別の場所に移動させてから処理したり、表に行番号列を加えてからワークシート関数VLOOKUPを使うなども考えられます。