エクセルVBAのFind関数で検索条件指定でもNothingの原因
元データには検索条件で指定したものが確かに表示されているのに、VBAでFind関数を使って検索すると「Nothing」となる場合があります。
ここではそんなときの原因と対処法について、解説します。
1.エラーになる原因は?
ではさっそく、例を見てみましょう。
まず、sheet1のA1セルに「=TODAY()」と入力します。すると、A1セルには今日の日付が入ります。
仮に、「=TODAY()」で表示された日付が「2020/1/1」だったとしましょう。
そしてVBAのFIND関数で「2020/1/1」を探したいと思い、次のコードを入力しました。
Worksheets("Sheet1").Cells.Find(What:="2020/1/1")
しかし結果は「Nothing」、セルA1を見つけ出すことはできませんでした。
2.Find関数の検索対象は初期設定が「数式」
確かに表示されているのに、なぜFIND関数で見つけることができないのでしょうか?
原因は「『検索する対象』の誤り」です。
FIND関数は、初期設定では「計算結果」にではなく、「数式」に対して検索するのです。
つまり、先ほどの例だと「TODAY」を探せばヒットしますが、TODAY関数が返した結果「2020/1/1」はヒットしないということです。
「数式」ではなく「計算結果」に対して検索を掛ける場合には、
Worksheets("Sheet1").Cells.Find(What:="2020/1/1",LookIn:= xlValues)
というように、LookInで値(xlValues)を指定するようにしましょう。
3.その他Find関数でのエラーについて
Find関数を使う時、慣れないうちはなぜNothingになるのか分からない場合があります。
その中で一番多いのは、個人の体感ですが、先ほど述べた「数式」に対して検索するのか、「計算結果」に対して検索するのか、という「検索対象」に関するものです。
そして、その次に多いのは「日付データに関する検索」です。
日付データの検索には、
・セルの表示形式
・検索の型(文字列形式/関数)
・シリアル値か数式か
・Findメソッドの引数
など、注意するポイントが多いのです。
「以前やった時には上手くいったのに、今回はエラーが出る」というのも、元データが違えばざらです。
この件については、またの機会に説明したいと思います。
【口コミ・評判のいいExcel本の紹介】