VBA

【ExcelVBA】Findメソッドでセル範囲を検索する

ExcelVBAのFind
ねぇもりさん、Excelのシートで文字列の検索ってできるかな?
もりさん
もりさん
それならFindメソッドを使うといいよ。戻り値がポイントだから解説していくね~
  • Findメソッドを使用して、指定のセル範囲に検索値(文字列や数値)が存在するか検索する方法
  • Findメソッドの戻り値である「オブジェクト型変数」のイメージ

マクロ作成でかかせない検索処理をしっかり理解していきましょう!

Findメソッドとは

もりさん
もりさん
Findメソッドは、戻り値のデータ型がポイントだよ~
  • 機能:指定のセル範囲を検索する
  • 戻り値:セル(Rangeオブジェクト)

Findメソッドでセルを検索し、指定のデータが見つからなかった場合、Nothingという値が返ります

具体例をみてみよう

検索範囲と検索値

A1~C3のセル範囲に、数字の1~9が「あるかないか」をチェックします。

この例では、それぞれの数字が「どのセルにあるか」までは特定せず、指定の範囲に「あるかないか」のみをチェックします。

vbafind1

Findメソッドを使用したコード

実行結果

このように出力されます。

1,3,5,7,9→見つかりました
2,4,6,8→見つかりませんでした

オブジェクト型変数の比較演算子はIs

解説を読んでいただくにあたって、とても大事なことを書きますね。

オブジェクト型変数の比較演算子はIs

【データ型による比較演算子の違い】

  • 文字列(String)や数値(Long)の比較演算子は=(イコール)
  • オブジェクト型変数の比較演算子はIs

プログラミングの「比較」には=(イコール)を使うことが多いですが、オブジェクト型変数の比較にはIsを使います

こんなイメージです。

英語で「彼はTomです」をHe is Tomといいます。

彼は「人間」という「オブジェクト」ですね。

vbafind2

だからオブジェクトの比較にはIsを使うんだな~程度に考えれば大丈夫です。

これを踏まえて、VBAのコードを図解していきます。

検索範囲に検索値が見つからなかった場合を判定する

vbafind3

Findメソッドは、検索値が見つからなかった場合Nothingという値を返します。

オブジェクト変数resultにNothingが格納されているということは、「検索値が見つからなかった」ことを意味します。

検索範囲に検索値が見つかった場合を判定する

記述方法その1

さて、ここまではなんとなく理解できても、この記述がちょっと難しいですね。

If result Is Nothing = False Then

vbafind4
「見つからない」の判定をするときは何も書かなかったのに、どうして「見つかった」の判定をするときは = False を書くの?
もりさん
もりさん
おっ、するどいね~解説していくね

「検索値が見つからなかった場合」の正確な記述はこうです。

If result Is Nothing = True Then

もし、result Is Nothing がTrueであるならば、という意味です。

= Trueを省略すると、「真の場合」を意味します

result Is Nothing がTrueであるならば

result Is Nothing (がTrue)であるならば:省略形

result Is Nothing であるならば

記述方法その2

実はこのような書き方もあるんですよ。

If Not result Is Nothing Then

「Not」は論理否定で、「~ではない」という意味です。

vbafind5

VBAコードの図解がこちらです。

vbafind6
NothingをNotで打ち消しています

「否定の否定」は肯定になりますよね。

検索値が見つかった場合の記述方法は2つ紹介しました。自分が「理解しやすいほう」「イメージしやすいほう」を使用しましょう。

Findメソッドまとめ
  1. 返り値はRangeオブジェクト(オブジェクト型)である
  2. 検索値が見つからなかった場合、Nothingという値が返る
  3. オブジェクト型変数の比較演算子はIsである