エクセル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本の紹介】


Top