Home » Access VBA » Access VBAでADOのRecortset.Filterを利用する

Access VBAでADOのRecortset.Filterを利用する

動作検証バージョン:Access2016

「access ado filter 特定の文字を含む」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Access VBA(Visual Basic for Applications)で、ADO(ActiveX Data Objects)のRecordset.Filterプロパティを、

ADODB.Recortset.Filter

使う方法を探している方による検索でしょうか。

[スポンサードリンク]

「access ado filter 特定の文字を含む」
という検索キーワードだけでは詳細がわかりませんので、簡単なプロシージャを2つご紹介しておきます。

ADODBのRecordset.Filterを使うサンプルプロシージャ

「ID」「名前」「住所」というフィールドを持った、「tbl_住所録」というテーブルが存在するAccessで、以下のプロシージャを実行すると、名前に「藤」という文字の含まれる(例えば、伊藤・加藤・藤井といった)レコードが、イミディエイトウィンドウに出力されます。

Sub ADOのFilterプロパティを利用する_抽出条件固定()

 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim sql As String

 Set cnn = CurrentProject.Connection
 Set rst = New ADODB.Recordset

 sql = "SELECT ID, 名前, 住所 FROM tbl_住所録 "
 rst.Open _
   Source:=sql, _
   ActiveConnection:=cnn

 rst.Filter = "名前 Like '%藤%' "

 Do Until rst.EOF
  Debug.Print rst!ID, rst!名前, rst!住所
  rst.MoveNext
 Loop

 rst.Close: Set rst = Nothing
 cnn.Close: Set cnn = Nothing

End Sub

基本構造は、ご紹介済みの全レコードを取得するプロシージャと同じです。

違うのは、Do~Loop文に入る直前の、
  rst.Filter = "名前 Like '%藤%' "
です。

この行が、RecordsetオブジェクトのFilterプロパティを利用している箇所です。

Recordset.FilterでLike条件を指定するためのワイルドカードは、「*」(アスタリスク)も「%」(パーセント)も使えるようですが、ADOを使うのなら「%」に慣れておくほうがいいのかな、と感じます。

VBE(Visual Basic Editor)でローカルウィンドウを表示した状態で、ADODB.Recordset型のオブジェクト変数・rstの「Filter」に注意しながらステップ実行して、
  rst.Filter = "名前 Like '%藤%' "
を通過すると、下図のようにFilterに文字列が設定されるのを確認しておくことをおすすめします。

VBEのローカルウィンドウでADODB.Recordset.Filteを確認

ADODBのRecordset.Filterで変数を使って条件指定するサンプルプロシージャ

「access ado filter 特定の文字を含む」
という検索をなさった方のことを想像すると、「特定の文字」を変数に格納しておいてからフィルターする記述に、戸惑う可能性があるような気がします。

そんなサンプルもご紹介しておきます。

以下のプロシージャを実行すると、途中で表示されるInputBoxから指定した文字を含むレコードが、イミディエイトウィンドウに出力されます。

Sub ADOのFilterプロパティを利用する_InputBoxから抽出条件指定()

 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim sql As String
 Dim flt As String

 Set cnn = CurrentProject.Connection
 Set rst = New ADODB.Recordset

 sql = "SELECT ID, 名前, 住所 FROM tbl_住所録 "
 rst.Open _
   Source:=sql, _
   ActiveConnection:=cnn

 flt = InputBox("抽出する名前を入力してください。")
 rst.Filter = "名前 Like '%" & flt & "%' "

 Do Until rst.EOF
  Debug.Print rst!ID, rst!名前, rst!住所
  rst.MoveNext
 Loop

 rst.Close: Set rst = Nothing
 cnn.Close: Set cnn = Nothing

End Sub

ポイントはもちろん、
  flt = InputBox("抽出する名前を入力してください。")
  rst.Filter = "名前 Like '%" & flt & "%' "
の部分です。

[スポンサードリンク]

Home » Access VBA » Access VBAでADOのRecortset.Filterを利用する

「Access VBA」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.