Findメソッド、FindNextメソッド

Findは指定したデータを含むセルを検索するメソッドです。検索したいキーワードがExcelファイルに何個入っているか、どこにあるかなど調べる際に使用します。うまく活用するとVBAの応用の幅が広がります。ここでは簡単な使い方を紹介します。

目次

「兵」の文字を探して色をつける

Sub 文字を検索し色を塗る()
Range("B:B").Find("兵").Interior.Color = vbCyan
End Sub

エラー処理

サンプルプログラムでもし「兵」に該当するセルがない場合、「Range(“B:B”).Find(“兵”)」はNothingを返します。このため「Range(“B:B”).Find(“兵”).Interior.Color」を実行すればエラーとなり停止してしまいます。

条件に一致するセルがなくてもエラーにならないようにするには、処理を分岐させる必要があります。次はFindメソッドを実行した結果をIfステートメントで分岐し、Nothingの場合の処理を加えたものです。該当の文字列が存在しない場合メッセージが表示されますが、プログラムが停止することはありません。

  • 一致する文字列がなかった時のエラー回避

If Range(“B:B”).Find(“兵”) Is Nothing Then

MsgBox “該当のセルがありません”

Else

Range(“B:B”).Find(“兵”).Interior.Color=VbCyan

End If

FindNextメソッド

県を含むセルを検索してすべて色を塗る

Sub 県だけ色を塗る()

    Set 戻り値 = Range("B:B").Find("県") 'B列から"県"が入るセルを検索してその戻り値を”戻り値”に代入する。見つからなければNothingを返す
    場所 = 戻り値.Address 'セルのAddressプロパティの値を"場所"に代入
    Do Until 戻り値 Is Nothing 'Do Until~Loopステートメントは、セルがNothingになるまで検索を繰り返す
        Range(戻り値.Offset(0, -1), 戻り値.Offset(0, 1)).Interior.Color = vbCyan '見つけたセルの左に1右に1で挟まれたセルの色を変える
        Set 戻り値 = Range("B:B").FindNext(戻り値) 'FindNextの引数に"戻り値"を指定。次の検索の戻り値を再度"戻り値"に代入
        If 場所 = 戻り値.Address Then '場所と戻り値が同じ値になるまで続ける(=最初に戻ってきたら終了)
            Exit Do
        End If
    Loop

End Sub

連続してFindメソッドを実行するには

Findメソッドは最初に見つかったセルしか返しません。ここでは検索の対象が複数あるときの処理を考えてみましょう。複数のセルを検索するときはFindNextメソッドを使います。FindNextメソッドは、Findメソッドによって実行された検索を、指定する位置から再実行します。FindNextメソッドで引数として指定するのは、再検索を開始するセルになります。

FindNextメソッド →同じ設定で次を検索する

書式 Rangeオブジェクト. FindNext(After)

引数 After:ここで指定したセルの次から検索を開始します。

戻り値 最初に見つかったセルのRangeオブジェクトを返します。見つからなかった場合はNotingを返します。


これをDo Until~Loopステートメントなどで繰り返すことによって、連続した検索が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次