- Findメソッドを使用して、指定のセル範囲に検索値(文字列や数値)が存在するか検索する方法
- Findメソッドの戻り値である「オブジェクト型変数」のイメージ
マクロ作成でかかせない検索処理をしっかり理解していきましょう!
Contents
Findメソッドとは
- 機能:指定のセル範囲を検索する
- 戻り値:セル(Rangeオブジェクト)
Findメソッドでセルを検索し、指定のデータが見つからなかった場合、Nothingという値が返ります
具体例をみてみよう
検索範囲と検索値
A1~C3のセル範囲に、数字の1~9が「あるかないか」をチェックします。
この例では、それぞれの数字が「どのセルにあるか」までは特定せず、指定の範囲に「あるかないか」のみをチェックします。

Findメソッドを使用したコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub findmacro() '検索範囲のセル(Range)を指定する Dim SearchArea As Range Set SearchArea = Range(Cells(1, 1), Cells(3, 3)) '(=A1:C3) For num = 1 To 9 '指定の検索範囲を検索する Dim result As Range Set result = SearchArea.Find(what:=num, LookAt:=xlWhole) '①検索範囲にnumが見つからなかった場合 If result Is Nothing Then Debug.Print num & "は見つかりませんでした" End If '②検索範囲にnumが見つかった場合 If result Is Nothing = False Then Debug.Print num & "が見つかりました" End If Next num End Sub |
実行結果
このように出力されます。
1,3,5,7,9→見つかりました
2,4,6,8→見つかりませんでした
オブジェクト型変数の比較演算子はIs
解説を読んでいただくにあたって、とても大事なことを書きますね。
【データ型による比較演算子の違い】
- 文字列(String)や数値(Long)の比較演算子は=(イコール)
- オブジェクト型変数の比較演算子はIs
プログラミングの「比較」には=(イコール)を使うことが多いですが、オブジェクト型変数の比較にはIsを使います。
こんなイメージです。
英語で「彼はTomです」をHe is Tomといいます。
彼は「人間」という「オブジェクト」ですね。

だからオブジェクトの比較にはIsを使うんだな~程度に考えれば大丈夫です。
これを踏まえて、VBAのコードを図解していきます。
検索範囲に検索値が見つからなかった場合を判定する

Findメソッドは、検索値が見つからなかった場合Nothingという値を返します。
オブジェクト変数resultにNothingが格納されているということは、「検索値が見つからなかった」ことを意味します。
検索範囲に検索値が見つかった場合を判定する
記述方法その1
さて、ここまではなんとなく理解できても、この記述がちょっと難しいですね。
If result Is Nothing = False Then

「検索値が見つからなかった場合」の正確な記述はこうです。
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」は論理否定で、「~ではない」という意味です。

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

「否定の否定」は肯定になりますよね。
検索値が見つかった場合の記述方法は2つ紹介しました。自分が「理解しやすいほう」「イメージしやすいほう」を使用しましょう。
- 返り値はRangeオブジェクト(オブジェクト型)である
- 検索値が見つからなかった場合、Nothingという値が返る
- オブジェクト型変数の比較演算子はIsである