インデックスを使って検索を行う

任意のフィールドの値を元に検索する

Sub レコード検索()
'Find メソッドを使用する
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim FileName As String
FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName
myRS.Open "アルバイト", myCon, adOpenForwardOnly, adLockOptimistic

Do
  '「手当」フィールドが「1000」のレコードを検索
  myRS.Find "手当 =1000"
  '該当レコードがない場合は処理を抜ける
  If myRS.EOF = True Then Exit Do
    myRS.Delete
  'カレントレコードを次のレコードへ移動
  myRS.MoveNext
Loop

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub

Find メソッドを使用して検索する
Recordset オブジェクト.Find Criteria

検索文字列 検索対象
"手当 = 1000" 「手当」フィールドの値が「1000」のレコード
"時給 >= 1000" 「時給」フィールドの値が「1000以上」のレコード
"氏名" LIKE "*田*" 「氏名」フィールドに「田」と言う文字が含まれるレコード

該当レコードが見つかった場合には、カレントレコードはその位置に移動する。
続けてFind メソッドを使用する場合にはカレントレコードの位置から検索を開始する。
すると、カレントレコードが再度検索されるため、このリストでは「MoveNext」でカレントレコード位置を移動させている。

該当レコードが見つからない場合、エラーは発生せず、カレントレコードの位置はレコード終端(最終レコードを超えたEOFの位置)に移動する

Find メソッドによる検索は、Seek メソッドより低速になる。

Find メソッドを使用して検索する
Find (Criteria, SkipRows, SearchDirection, Start)

引数
Criteria 検索に使用する列の名前、比較演算子、および値を指定するステートメントを含む文字列型(String) の値を指定します。
SkipRows 省略可能です。検索を開始する、カレント行またはStartブックマークからの行のオフセットを指定する長整数型(Long) の値を指定します。既定値は 0です。既定では、カレント行から検索が開始されます。
SearchDirection 省略可能です。検索方向に向かって、カレント行または使用可能な次の行のいずれから検索を開始するかを指定する
SearchDirectionEnum値を指定します。検索に成功しなかった場合、この値にadSearchForward が指定されていると、Recordsetの終わりで停止します。また、検索に成功しなかった場合、この値にadSearchBackward が指定されていると、Recordsetの先頭で停止します。
Start 省略可能です。検索の開始位置として使用するバリアント型(Variant) のブックマークを指定します。

SearchDirectionEnum
Recordset 内のレコードの検索方向を表します。
定数 説明
adSearchBackward -1 後方検索をし、Recordsetの先頭で終了します。一致するレコードが見つからない場合、レコードポインタは BOF に移動します。
adSearchForward 1 前方検索をし、Recordsetの末尾で終了します。一致するレコードが見つからない場合、レコードポインタは EOF に移動します。

「アルバイト」テーブル

実行結果