文字列検索の基本

エクセルでは毎度お馴染みの検索機能。[Ctrl]+[F]のショートカットキーでメニュー画面を開いて、検索する文字列を入力してあげるだけで、あっという間に検索してくれますよね。これと同じことをVBAでやってみようと思います。基本構文はコチラですっ。

セル範囲.Find(What:=”検索する文字列”).Activate

引数Whatを使って検索する文字列を指定してあげます。例えば、セル範囲A2:A11の中で文字列”田中”を検索したい場合は、

Range(“A2:A11″).Find(What:=”田中”).Activate

という構文になります。

vba_pres_serch

田中さんが検索されました。検索範囲がワークシート全体の時は、セル範囲をCellsにしてあげるとOKです。セル範囲にCellsを指定すると、ワークシート上の全セルが検索対象となります。

Cells.Find(What:=”田中”).Activate

 

vba_pres_serch2

セルH22にいる田中さんが無事検索されました。では、ワークシート上に田中さんがいなかった場合はどうでしょうか?実は、Findメソッドは検索対象が見つかった場合は戻り値としてRangeオブジェクトを返してくれますが、検索対象が見つからなかった場合は「Nothing」を返します。「Nothing」というのはRangeオブジェクトではありませんので、Activateメソッドを使うとエラーが発生してしまいます。では、どうこれを回避したら良いのでしょうか?一手間加えればこのエラーを回避することができます。「Findメソッドの検索結果がNothingなのか否か?」を変数を使って判定してあげます。

変数FoundCellを作り、「Findメソッドの検索結果がNothingなのか否か?」という情報を格納してあげています。もし田中さんが見つからない場合はFoundCellの値はNothingとなり、見つかった場合はRangeオブジェクトが格納されます。次にIf文でFoundcellの値を判定し、NothingであればExit Subでプロシージャを抜け、Nothingでなければ見つかったセルをアクティヴにします。このコードがFindメソッドを使った文字列検索の基本となります。以上、『文字列検索の基本』でございました ( ̄^ ̄)ゞ