文字列検索の基本
エクセルでは毎度お馴染みの検索機能。[Ctrl]+[F]のショートカットキーでメニュー画面を開いて、検索する文字列を入力してあげるだけで、あっという間に検索してくれますよね。これと同じことをVBAでやってみようと思います。基本構文はコチラですっ。
セル範囲.Find(What:=”検索する文字列”).Activate
引数Whatを使って検索する文字列を指定してあげます。例えば、セル範囲A2:A11の中で文字列”田中”を検索したい場合は、
Range(“A2:A11″).Find(What:=”田中”).Activate
という構文になります。
田中さんが検索されました。検索範囲がワークシート全体の時は、セル範囲をCellsにしてあげるとOKです。セル範囲にCellsを指定すると、ワークシート上の全セルが検索対象となります。
Cells.Find(What:=”田中”).Activate
セルH22にいる田中さんが無事検索されました。では、ワークシート上に田中さんがいなかった場合はどうでしょうか?実は、Findメソッドは検索対象が見つかった場合は戻り値としてRangeオブジェクトを返してくれますが、検索対象が見つからなかった場合は「Nothing」を返します。「Nothing」というのはRangeオブジェクトではありませんので、Activateメソッドを使うとエラーが発生してしまいます。では、どうこれを回避したら良いのでしょうか?一手間加えればこのエラーを回避することができます。「Findメソッドの検索結果がNothingなのか否か?」を変数を使って判定してあげます。
1 2 3 4 5 6 |
Sub Search_Method() Dim FoundCell As Range Set FoundCell = Cells.Find(what:="田中") If FoundCell Is Nothing Then Exit Sub FoundCell.Activate End Sub |
変数FoundCellを作り、「Findメソッドの検索結果がNothingなのか否か?」という情報を格納してあげています。もし田中さんが見つからない場合はFoundCellの値はNothingとなり、見つかった場合はRangeオブジェクトが格納されます。次にIf文でFoundcellの値を判定し、NothingであればExit Subでプロシージャを抜け、Nothingでなければ見つかったセルをアクティヴにします。このコードがFindメソッドを使った文字列検索の基本となります。以上、『文字列検索の基本』でございました ( ̄^ ̄)ゞ