このページの内容について
このページは、VBAエキスパート(ExcelVBAスタンダード)試験合格講座の第九回記事です。公式テキスト第6章「セルの検索」の内容について解説します。自分でも手を動かしながら読み進めてください。主に講座受講者の復習での利用を想定しています。
Findメソッド
Excelにはセルの値や式を検索する機能があります。RangeオブジェクトのFindメソッドはこの機能をマクロで呼び出すことができます。

文法
引数 | 型 | 役割 |
---|---|---|
What | Variant | 検索したい値を指定します |
After | Variant(Range) | セルを指定すると、そのセルより後ろを検索対象とします。 |
LookIn | Variant(XlFindLookIn) | xlFormulas ・・ 数式 xlValues ・・ 値 xlComments ・・ メモ xlCommentsThreaded ・・ コメント |
LookAt | Variant(XlLookAt) | xlWhole ・・ 完全一致 xlPart ・・ 部分一致 |
SearchOrder | Variant(XlSearchOrder) | xlByRows ・・ 行方向検索 xlByColumns ・・ 列方向検索 |
SearchDirection | Variant(XLSearchDirection) | xlNext ・・ 次を検索 xlPrevious ・・ 前を検索 |
MatchCase | Variant(Boolean) | True ・・ 大文字と小文字を区別する False ・・ 大文字と小文字を区別しない |
MatchByte | Variant(Boolean) | True ・・ 半角と全角を区別する False ・・ 半角と全角を区別しない |
SearchFormat | Variant(Boolean) | Application.FindFormatで指定した書式を検索条件に含めることができます。 |
基本の使い方
Findメソッドには、多くの引数がありますが公式テキストの説明範囲に従い、ここでは「What」「LoolAt」以外の引数は使用しません。Findメソッドは検索したセルが見つかった場合は、Rangeオブジェクトを返します。
サンプルコード(クリックでコピー)
Private Sub Test_Find()
Dim ws As Worksheet
Dim rng_obj As Range
Dim search_word As String
Dim r As Long, c As Long
search_word = "検索したいセル"
r = Int((10000 * Rnd + 1))
c = Int((100 * Rnd + 1))
Set ws = ThisWorkbook.Worksheets(1)
ws.Cells(r, c).Value = search_word
Set rng_obj = ws.Range(ws.Cells(1, 1), ws.Cells(10000, 100)).Find(search_word, LookAt:=xlWhole)
Call rng_obj.Activate
End Sub
実行結果
上記サンプルコードは、ランダムな行(1~10,000)とランダムな列(1~100)に値を入力しFindメソッドで検索、返されたRangeオブジェクトを使用し、値が入力されたセルをアクティブにします。
見つからなかったとき
Findメソッドがセルを見つけたときは、Rangeオブジェクトを返しますが、見つからなかったときは、オブジェクト変数の初期値である「Nothing」が返されます。そのためセルが見つからなかった場合、後続の処理でRangeオブジェクトを使用しているとエラーが発生してしまいます。これを回避するために、通常は、戻り値が「Nothing」であるかどうかを判定すること処理を入れます。
サンプルコード(クリックでコピー)
Private Sub Test_NotFound()
Dim ws As Worksheet
Dim rng_obj As Range
Dim search_word As String
search_word = "検索したいセル"
Set ws = ThisWorkbook.Worksheets(1)
Set rng_obj = ws.Range(ws.Cells(1, 1), ws.Cells(10000, 100)).Find(search_word, LookAt:=xlWhole)
If Not rng_obj Is Nothing Then
rng_obj.Activate
Else
Call MsgBox("見つかりませんでした", vbCritical)
End If
End Sub
実行結果
上記サンプルコードは、マクロを実行中のブックの1番目のシートから「検索したいセル」という文字列を探し、見つかった場合、セルをアクティブにします。見つからなかった場合、メッセージを表示します。
【PR】VBAエキスパート試験対策記事
当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパート(Excel VBA ベーシック/Excel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。
Comment