HOME > 即効テクニック > AccessVBA > データ操作 > レコードを抽出する

即効テクニック

データ操作

レコードを抽出する

(Access 2000/2002/2003)
●概要●
構文  expression.Filter           取得/設定

設定項目        内容
expression      Recordsetオブジェクトを指定[省略不可]]

ダイナセットタイプまたはスナップショットタイプのRecordsetオブジェクトに含まれるレコードの抽出条件を設定します。設定値は文字列型で、SQLステートメントのWHERE句から予約語「WHERE」を除いた値になります。
Filterプロパティに抽出条件を設定しても、それだけでは抽出は実行されません。そのRecordsetオブジェクトをもとに、新規にRecordsetオブジェクトを開いた時点で、条件に一致するレコードが抽出されたRecordsetオブジェクトが作成されます。
次のコードは、インプットダイアログで入力した商品名のレコードを抽出するものです。

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

●サンプル●
Sub ConditionFilterSample()
    Dim myRS As DAO.Recordset, myRS2 As DAO.Recordset
    Dim myStr As String
    '[販売クエリ]をダイナセットタイプのレコードセットとして開く
    Set myRS = CurrentDb.OpenRecordset("販売記録クエリ", dbOpenDynaset)
  '抽出条件の入力
    myStr = InputBox("商品名を入力してください")
  '抽出条件の設定
    myRS.Filter = "商品名 = '" & myStr & "'"  
  'Recordsetオブジェクトを作成
    Set myRS2 = myRS.OpenRecordset
    '条件に一致するレコードが存在しない場合
    If myRS2.EOF Then
        MsgBox "該当するレコードがありません"
    '条件に一致するレコードが存在する場合
    Else
    '最後のレコードに移動
        myRS2.MoveLast
        MsgBox myRS.RecordCount & " 件中 " & myRS2.RecordCount & _
               " のレコードが抽出されました"
    End If
    myRS.Close
    myRS2.Close
End Sub

●補足●
抽出の前後でRecordsetオブジェクトを分ける必要がない場合、「Set myRS = myRS.OpenRecordset」と記述すれば、抽出前のレコードセットを、抽出を実行したレコードセットで上書きできます。