HOME > 即効テクニック > AccessVBA > データ操作 > 指定した条件を満たすすべてのレコードを検索する

即効テクニック

データ操作

指定した条件を満たすすべてのレコードを検索する

(Access 2000/2002/2003)
●概要●
構文    expression.FindFirst Criteria
        expression.FindNext Criteria
        expression.FindLast Criteria
        expression.FindPrevious Criteria

設定項目        内容
expression      既存のダイナセットタイプ、またはスナップショットタイプの
                Recordsetオブジェクトを指定[省略不可]
Criteria        検索条件を示す文字列を指定。SQLステートメントのWHERE句の
                予約語「WHERE」以降と同じ[省略不可]

RecordsetオブジェクトのFindFirstメソッド、FindNextメソッドを使用して指定した条件を満たすすべてのレコードを検索します。FindFirstメソッドはレコードセットの最初のレコードから条件を満たす最初のレコードを検索し、見つかった場合はそのレコードがカレントレコードとなります。
一方、FindNextメソッドはカレントレコードから検索を行い、条件を満たすレコードが見つかった場合、そのレコードがカレントレコードとなります。どちらのメソッドも条件を満たすレコードが見つからない場合は、RecordsetオブジェクトのNoMatchプロパティがTrueになるため、FindeFirstメソッドを実行したあと、Do Until...LoopステートメントでNoMatchプロパティがTrueになるまでFindNextメソッドで検索することにより、条件を満たすすべてのレコードを検索できます。

同様に、FindLastメソッドと、FindePreviousメソッドを使用してレコードセットの最後からすべてのレコードセットを検索することができます。
ここでは「社員テーブル」をデータソースとしてダイナセットタイプのRecordsetオブジェクトを作成し、「部署コード」が「30」のすべてのレコードを検索します。

・RecordsetオブジェクトのFind系メソッド

メソッド名	検索開始位置		検索する方向
FindFirst	最初のレコード		最後のレコードに向けて
FindLast	最後のレコード		最初のレコードに向けて
FindNext	カレントレコード	最後のレコードに向けて
FindPrevious	カレントレコード	最初のレコードに向けて

●設定●
動作確認をするためには、Visual Basic Editorのメニューから[ツール]→[参照設定]コマンドを選択し、[参照設定]ダイアログボックスで「Microsoft DAO 3.6 Object Library」にチェックを入れてください。

●サンプル●
Public Sub FindAllRecordSample()
    Dim myDB As Database
    Dim myRS As DAO.Recordset
    'カレントデータベースを変数に代入する
    Set myDB = CurrentDb
    '[社員テーブル]をデータソースとしてレコードセットを開く
    Set myRS = myDB.OpenRecordset("社員テーブル", dbOpenDynaset)
    '指定した条件を満たす最初のレコードを検索する(FindFirstメソッド)
    myRS.FindFirst "部署コード=30"
    Do Until myRS.NoMatch
        '指定した条件を満たすレコードが存在する場合
         MsgBox "***部署コード=30のレコード***" & vbCrLf & _
        "社員コード : " & myRS!社員コード & vbCrLf & _
        "部署コード : " & myRS!部署コード & vbCrLf & _
        "名前 : " & myRS!名前 & vbCrLf & _
        "職種 : " & myRS!職種 & vbCrLf & _
        "入社年月日 : " & myRS!入社年月日
        '指定した条件を満たす次のレコードを検索する
        myRS.FindNext "部署コード=30"
    Loop
    MsgBox "検索が終了しました"
    'レコードセットを閉じる
    myRS.Close
End Sub