【用語集に記載の内容について】

用語集に記載されているメソッドや関数の引数は、VBAエキスパート試験の試験範囲に基づいており、すべての引数を網羅しておりません。 また、書式は公式テキストの記載に準じています。
試験範囲外の引数や詳細については、ヘルプ機能やオブジェクトブラウザーをご参照ください。

【コードをコピーして実行する場合の注意】

文字コードの関係上、半角の「¥」は「/」で表示されるため、当サイトでは全角の「¥」で記載しています。当サイトのコードをコピーして実行する場合は、全角の「¥」を半角の「¥」に変換してください。

Findメソッド

名称Findメソッド
説明
セル範囲内で指定した値を検索します。

検索値が見つかった場合は、そのセル(Rangeオブジェクト)を返し、見つからなかった場合はNothingを返します。

Findメソッドは、Excelの検索機能と同等の動作を行います。
また、Findメソッドの引数は、ワークシート上で検索を実行した際に表示される、[検索と置換]ダイアログボックスの設定値に相当します。

Findメソッドで検索するとき、Findメソッドで指定した引数は前回指定した値がそのまま使われます。これはマクロだけでなく、手動操作で検索を実行した時も、前回の指定が記憶され、その指定にしたがって検索が行われます。
書式
セル範囲.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

セル範囲:検索するセル範囲を指定
What:検索する値を指定
After[省略可能]:検索を開始するセルを指定
LookIn[省略可能]:検索対象を定数で指定
LookAt[省略可能]:検索方法を定数で指定
SearchOrder[省略可能]:検索の方向(行・列)を定数で指定
SearchDirection[省略可能]:検索の向き(前・次)を定数で指定
MatchCase[省略可能]:大文字と小文字を区別するかどうかをTrueまたはFalseで指定
MatchByte[省略可能]:全角と半角を区別するかどうかをTrueまたはFalseで指定
SearchFormat[省略可能]:検索時の書式を指定

<LookInに指定可能な定数(一部)>
xlValues:値を検索
xlFormulas:数式を検索

<LookAtに指定可能な定数>
xlWhole:完全一致で検索
xlPart:部分一致で検索

<SearchOrderに指定可能な定数>
xlByRows:行単位で検索。行を横方向に検索してから、次の行に移動。
xlByColumns:列単位で検索。列を下方向に検索してから、次の列に移動。

<SearchDirectionに指定可能な定数>
xlNext:次のセルを検索(規定値)
xlPrevious:前のセルを検索

<[検索と置換]ダイアログボックスの設定値と相当する各引数>What:「検索する文字列」リストボックスに指定する値
After:なし
LookIn:「検索対象」ドロップダウンリスト
LookAt:「セル内容が完全に同一であるものを検索する」チェックボックス
SearchOrder:「検索方向」ドロップダウンリスト
SearchDirection:定数「xlNext」を設定した場合は、[次を検索]ボタン
MatchCase:「大文字と小文字を区別する」チェックボックス
MatchByte:「半角と全角を区別する」チェックボックス
SearchFormat:「書式」ボタン

Afterに指定したセルの次のセルから検索が開始されます。
省略した場合は、指定したセル範囲の左上セルを指定したと見なされます。
また、Afterに指定したセルは検索対象のセルから除外されるわけではありません。

例えば、セル範囲A1:A4に対してFindメソッドを実行し、AfterにセルA1を指定していた場合、A2→A3→A4→A1の順で検索されます。

ワークシート上で検索を実行したとき、アクティブセルの次のセルから検索が開始され、アクティブセルが最後に検索される挙動と同じです。
コード例①
【Findメソッドでセルを検索】
Sub Macro1()
    Range("A1:A4").Find(What:="ブドウ", Lookat:=xlWhole).Select
End Sub

Findメソッドで、アクティブシートのセル範囲A1:A4で「ブドウ」を検索します。

検索値が見つかった場合、そのセル(Rangeオブジェクト)を返すため、そのセルをSelectメソッドで選択しています。

マクロを実行すると、アクティブシートのセルが以下の場合は、セルA4が選択されます。
A
1 リンゴ
2 バナナ
3 イチゴ
4 ブドウ
コード例②
【Findメソッドの戻り値をIfステートメントで判定】
Sub Macro2()
    Dim cell As Range

    'Findメソッドで「メロン」を検索
    Set cell = Range("A1:A4").Find(What:="メロン", Lookat:=xlWhole)
    
    '検索値が見つからない場合はNothingが格納される
    If cell Is Nothing Then
        MsgBox "メロンはありません"
    End If
End Sub

Findメソッドで、アクティブシートのセル範囲A1:A4で「メロン」を検索します。

検索値が見つからない場合は、オブジェクト変数cellにNothingが格納されます。

Ifステートメントでオブジェクト変数cellの値がNothingかを判定します。

<変数cellの値がNothingの場合>
「メロンはありません」のメッセージボックスが表示されます。

マクロを実行すると、アクティブシートのセルが以下の場合、「メロンはありません」のメッセージボックスが表示されます。
A
1 リンゴ
2 バナナ
3 イチゴ
4 ブドウ
カテゴリスタンダード