VBA開発

セルを検索する(Findメソッド)【VBA入門】

Findメソッドは指定した範囲且つ、指定した条件に当てはまるセルを検索します。
条件に当てはまるセルが複数ある場合はFindNextメソッドもしくはFindPreviousメソッドを使用します。

メソッド説明

FIndメソッドの構文は以下のように記載します。

 
object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
 

引数の一覧は以下です。

引数定数説明省略可否
What検索する文字不可
After検索開始位置可能
LookInxlFormulas「数式」で検索可能
xlValues「値」で検索
xlComents「コメント分」で検索
LookAtxlPart「一部一致」で検索可能
xlWhole「全部一致」で検索
SearchOrderxlByRows「列」で検索をする可能
xlByColumns「行」で検索をする
SearchDirectionxlNext「順方向」で検索可能
xlPrevious「逆方向」で検索
MatchCaseTrue大文字と小文字を区別する可能
False大文字と小文字を区別しない
MatchByteTrue半角と全角を区別する可能
False半角と全角を区別しない
SearchFormatTrue書式を検索する可能
False書式を検索しない

注意点

  • 最初に見つかった一つ目のセルのみ検索結果として返ります。複数はFindNext/FindPreviousを参照。
  • 検索の開始は一番左上のセルの2つ目からです。1つ目のセルは一番最後に検索します。
    例)検索範囲がA1:A100ならA2から順番に検索し、A100まで検索し終えた後、A1を計算します。
  • 検索結果が0件の場合、「Nothing」が返る為、エラー回避処理は必須
  • 引数で検索条件に関わるものは、省略可能なものも省略せず記載する。
    省略すると検索結果が異なる場合がある。(デフォルト値がエクセル検索ダイアログと連動している)
  • Findメソッドを使用すると、エクセル検索ダイアログの設定が書き換えられます。

使い方サンプル

完全一致での検索の場合

商品コードや顧客コードなどの、セル内で特定文字を検索するケースが主な使い方です。
(一つの範囲で重複がないと想定される場合に使用します)

    Dim rng as Range
    Dim target As Range
    
    '■■検索範囲を設定
    Set rng = Range("A1:A20")
  
   '■■検索処理 
    Set target = rng.Find(what:="あいうえお", LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=True, MatchByte:=True)
  
    If target Is Nothing Then
        Msgbox "検索結果が存在しません"
    Else
        Msgbox  target.Row & "行目" & target.Column & "列目に存在します"
    End If

パーツ化

便利なパーツ化(関数化)しています。
コピペでOK。こちらもお使いください。

複数の検索結果を抽出する場合

FindNextメソッドもしくはFindPreviousメソッドで複数結果を抽出可能です。
詳細は下記ページ参照してください。
【VBA入門】マクロで複数のセルの値を全て抽出する(FindNext/FindPreviousメソッド)

 

コメント

タイトルとURLをコピーしました