この記事では、VBAでの検索処理に使用する、Findメソッドの使用方法を解説します。
基本構文から、引数の設定方法などの記述方法を解説します。
VBA関連解説
Excelの検索機能
Findメソッドは、Excelの検索機能を再現したものともいえます。
Excelの検索機能はホームタブの編集にある、検索と選択ボタンで始めます。
プルダウンから、検索を選択すると、検索と置換ダイアログボックスが表示されます。
オプションボタンをクリックすると、詳細な検索条件が設定できます。
VBAでは、これらをの検索条件が、Findメソッドで再現できます。
Find メソッドの構文
VBAでは、セルの検索にFindメソッドがよく使用されます。
基本構文
Findメソッドは、セル範囲内で指定の文字列を検索します。
Find 構文
Range("A:A").Find ( What, After, LookIn, LookAt, SearchOrder, SerchDirection, MatchCase, MatchByte, SearchFormat )
引数の設定は下表のようになります。
Find 引数
使用方法
使用方法については、下記サンプルを実際に処理した結果とともに解説します。
抽出サンプル
Find 例
Sub Find_BASE() Dim A As Range Set A = Range("A:A").Find(What:="山田", LookAt:=xlWhole) If A Is Nothing Then MsgBox "存在しません" Else MsgBox "存在します" End If End Sub
検索結果
上記コードは、完全一致で検索したFindメソッドの戻り値を変数に格納し、検索結果を判定する、最もシンプルな例です。
戻り値はRangeオブジェクトで返されるので、格納する変数もオブジェクト型で指定します。
一致するデータが見つからなかった場合、戻り値はNothingを返します。
そこで、戻り値がNothingかどうかで、検索結果を判定します。
検索結果の加工例
検索結果のコピー1
Find COPY
Sub Find_COPY1() Dim A As Range Set A = Range("A:A").Find(What:="山田", LookAt:=xlWhole) If A Is Nothing Then MsgBox "存在しません" Else A.Offset(0, 1).Copy Range("D2") End If End Sub
検索結果
上記コードは、A列を山田で検索し、検索結果の右セルの点数のみを、D2セルに出力する例です。
Offset を使用するところがポイントです。
検索結果のコピー2
Find COPY
Sub Find_COPY2() Dim A As Range Set A = Range("A:A").Find(What:="山田", LookAt:=xlWhole) If A Is Nothing Then MsgBox "存在しません" Else A.Resize(1,2).Copy Range("D2") End If End Sub
検索結果
上記コードは、A列を山田で検索し、検索結果と右セルを合わせて、D2セルを基準に出力する例です。
Resize を使用するところがポイントです。
注意点等
引数が保存される
引数 LookIn、LookAt、SearchOrder、MatchByte の設定は、Findメソッドを使用するたびに保存されます。
Findメソッドを使用する時に、上記の引数を省略すると、前回保存された設定が有効となります。
これを回避するには、上記の引数は明示的に設定するといいですが、これらの引数設定を変更することがない場合は、毎回省略するといいでしょう。
その他の検索方法
検索処理としてFindメソッドを解説しましたが、その他にも検索する方法はあります。
例えば、For Nextステートメントや、Vlookup関数・Match関数など様々な検索方法がありますので、適宜使用してみましょう。
検索・抽出・並び替え
VBAでExcelシートをデータベース的に使用するときには、検索・抽出・並び替えの各機能の使用が必要となってきます。
この記事では、検索機能に使用する Find メソッドについて解説しました。
下記の記事では、AutoFilter メソッドを使用した抽出機能について解説しています。
下記の記事では、Sort メソッド・Sort オブジェクトを使用した並べ替え機能について解説しています。
概要解説に戻る