#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


実行結果:
実行結果
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved