【VBA】Findの基本と応用(Find, FindNext, FindPrevious)

この記事では、Excel VBAでよく使用される、Findメソッドとその応用について、基本から応用までをわかりやすく解説します。具体的なプログラムのサンプルも交えて、FindFindNextFindPreviousの使い方を網羅的にご紹介します。

目次

Findメソッドの基本

Findメソッドは、Excelのシート内で特定の値や文字列を検索するためのVBAメソッドです。このメソッドを使うと、独自の検索処理をプログラムできます。

基本的な使い方は以下の通りです。

Set rng = Worksheets("Sheet1").Range("A1:A10").Find("検索文字列")

この一行で、Sheet1A1:A10の範囲で検索文字列を検索し、見つかったセルをrngに格納します。

引数の詳細

Findメソッドはいくつかの引数を取ることができます。主要な引数には以下のようなものがあります。

  • What: 検索する値や文字列。
  • After: 検索を開始するセル。
  • LookIn: 検索対象(値、書式など)。
  • LookAt: 部分一致か完全一致か。
  • SearchOrder: 検索方向(行単位か列単位か)。

基本的な使い方は以下の通りです。

Set rng = Worksheets("Sheet1").Range("A1:A10").Find(What:="検索文字列", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

この一行で、Sheet1A1:A10の範囲で検索文字列を検索し、見つかったセルをrngに格納します。

FindNextとFindPreviousの使い方

FindNextメソッドとは

FindNextメソッドは、Findメソッドで見つけたセルの次にある、同じ条件にマッチするセルを検索します。

FindPreviousメソッドとは

FindPreviousメソッドは、Findメソッドで見つけたセルの前にある、同じ条件にマッチするセルを検索します。

使い方の例

Set rng = Worksheets("Sheet1").Range("A1:A10").Find("検索文字列")
Set nextRng = rng.FindNext(rng)
Set prevRng = rng.FindPrevious(rng)

このコードでは、Findで見つけたセルを基点に、次と前のマッチするセルをそれぞれnextRngprevRngに格納します。

応用例:一覧から特定のデータを抽出

サンプルプログラム

以下は、一覧から特定のデータを抽出するためのサンプルプログラムです。

Sub FindSample()
    Dim ws As Worksheet
    Dim rng As Range
    Dim firstAddress As String
    
    Set ws = Worksheets("Sheet1")
    Set rng = ws.Range("A1:A10").Find("検索文字列")
    
    If Not rng Is Nothing Then
        firstAddress = rng.Address
        Do
            ' 何らかの処理
            Set rng = ws.Range("A1:A10").FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> firstAddress
    End If
End Sub

このプログラムでは、FindメソッドとFindNextメソッドを組み合わせて、一覧から特定のデータを抽出しています。

findメソッドに関するFAQ

Q:findメソッドの基本的な使い方は?

A:findメソッドは、Excelのシート内で特定の値や文字列を検索するためのVBAメソッドです。基本的な使い方は以下のようになります。

Set rng = Worksheets("Sheet1").Range("A1:A10").Find("検索文字列")

Q:findメソッドで大文字と小文字を区別しない検索は可能か?

A:はい、MatchCase引数をFalseに設定することで、大文字と小文字を区別しない検索が可能です。

Q:findメソッドで部分一致検索はできるのか?

A:はい、LookAt引数をxlPartに設定することで、部分一致検索ができます。

Q:findメソッドで複数のセルにマッチする場合、どのセルが選ばれるのか?

A:After引数で指定したセルの次にある、最初にマッチしたセルが選ばれます。

Q:findメソッドで見つからなかった場合、エラーは発生するのか?

A:いいえ、エラーは発生しませんが、RangeオブジェクトがNothingに設定されます。そのため、見つからなかった場合の処理を追加することが推奨されます。

Q:findメソッドとfindNextメソッドの違いは?

A:Findメソッドは新たな検索を行いますが、FindNextメソッドは最後にFindで見つけたセルを基点に次のマッチするセルを検索します。

Q:findメソッドで書式も検索対象にすることはできるか?

A:はい、LookIn引数をxlFormatsに設定することで、書式も検索対象にできます。

Q:findメソッドで逆方向に検索する方法は?

A:逆方向に検索するには、FindPreviousメソッドを使用します。このメソッドはFindメソッドで見つけたセルを基点に前のマッチするセルを検索します。

Q:findメソッドで検索結果をループ処理する方法は?

A:Findメソッドで見つけた最初のセルのアドレスを記録しておき、FindNextメソッドを使用してループ処理を行います。最初のセルに戻ったらループを終了します。

Q:findメソッドで日付を検索する際の注意点は?

A:日付を検索する場合、日付はExcel内部で数値として扱われているため、検索する日付も同様に数値で指定する必要があります。

関連動画

まとめ

この記事では、Excel VBAのFindメソッドとその応用について、基本から詳しく解説しました。FindFindNextFindPreviousの使い方を理解し、独自の検索処理をプログラムできるようになると、Excel操作がよりスムーズになります。是非、この知識を活かしてみてください。

Excelのショートカットキーの練習

当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

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