この記事では、Excel VBAでよく使用される、Find
メソッドとその応用について、基本から応用までをわかりやすく解説します。具体的なプログラムのサンプルも交えて、Find
、FindNext
、FindPrevious
の使い方を網羅的にご紹介します。
Findメソッドの基本
Find
メソッドは、Excelのシート内で特定の値や文字列を検索するためのVBAメソッドです。このメソッドを使うと、独自の検索処理をプログラムできます。
基本的な使い方は以下の通りです。
Set rng = Worksheets("Sheet1").Range("A1:A10").Find("検索文字列")
この一行で、Sheet1
のA1: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)
この一行で、Sheet1
のA1: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
で見つけたセルを基点に、次と前のマッチするセルをそれぞれnextRng
とprevRng
に格納します。
応用例:一覧から特定のデータを抽出
サンプルプログラム
以下は、一覧から特定のデータを抽出するためのサンプルプログラムです。
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
メソッドとその応用について、基本から詳しく解説しました。Find
、FindNext
、FindPrevious
の使い方を理解し、独自の検索処理をプログラムできるようになると、Excel操作がよりスムーズになります。是非、この知識を活かしてみてください。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome