#423 | オープン済みレコードセットにフィルタをかける方法 | VBA | |
テーブルに保存されているすべてのレコードではなく、一部のレコードだけを抽出して読み込みたい場合、クエリを作ってそれをレコードセットとして開くか、SQL文を指定してレコードセットを開くのが一般的ですが、RecordsetオブジェクトのFilterプロパティを操作する方法もあります。 この方法は、まず全レコードの含まれるレコードセットを開いたあと、そのレコードセットに対してフィルタを掛けます。そしてその結果の、抽出されたレコードセットを別のRecordsetオブジェクトとして生成します。以降はそのRecordsetオブジェクトを操作することによって、VBA上で抽出されたレコードだけを扱うことができます。 次のプログラム例では、まず「得意先」テーブルを開き、そこから「都道府県が東京都であるレコード」だけを抽出したレコードセットを生成してイミディエイトウィンドウに出力、続いて「都道府県が千葉県であるレコード」だけを抽出して同様にイミディエイトウィンドウに出力しています。 なお、RecordsetオブジェクトのFilterプロパティを扱うためにはダイナセットまたはスナップショットでレコードセットを開く必要があります。OpenRecordsetメソッドの第2引数としてそれを指定します。 Dim dbs As Database Dim rst As Recordset Dim rstf As Recordset Set dbs = CurrentDb 'まずテーブル全体のレコードセットを開きます Set rst = dbs.OpenRecordset("得意先", dbOpenDynaset) 'レコードセットにフィルタを掛けます rst.Filter = "都道府県 = '東京都'" 'フィルタの掛かったレコードセットから新しいレコードセットを生成します Set rstf = rst.OpenRecordset With rstf Do Until .EOF Debug.Print !得意先名, !都道府県 .MoveNext Loop .Close End With Debug.Print "***************************" '別のフィルタを掛けます rst.Filter = "都道府県 = '千葉県'" Set rstf = rst.OpenRecordset With rstf Do Until .EOF Debug.Print !得意先名, !都道府県 .MoveNext Loop .Close End With rst.Close 実行結果: |
|||
|
Copyright © T'sWare All rights reserved |