VBA フィルター関係 [VBA]
ACCESSには、フォームに表示するレコードを条件で絞り込む方法がいくつか用意されています。
まず、DoCmdを使用する方法。
ApplyFilterと、SetFilterと言うメソッドがあります。
どちらを利用しても特に違いは無いようです。(どう違うのか調べたのですが、わかりませんでした。)
SetFilterは2010で追加されたメソッドなので、互換性を考えると、ApplyFilterが無難かもしれません。
構文・DoCmd.ApplyFilter FilterName , WhereCondition , ControlName
基本的には、第2パラメタのWhereConditionに条件式を指定すれば良いだけです。
メインフォーム上にサブフォームを配置していて、メインフォーム側に処理でサブフォームにフィルターを適用したい場合は、ControlNameにサブフォーム名を記述します。
下記のようなフォームで、例を示します。
都道府県名のレコードを一覧表示しているフォームです。
都道府県名の、最後が「府」のレコードを抽出するとします。
この場合は、下記のコードを記述します。
(例では、コマンドボタンのクリックイベントに記述しています。)
DoCmd.ApplyFilter , "TDFKMEI LIKE '*府' "
結果は以下の通り。
表示内容が、京都府と大阪府のみになり、フィルターが適用されている状態になりました。
フィルターを解除する場合は、
DoCmd.ShowAllRecords
です。
DoCmdよりも、もっと直接的にフィルターを行う方法として、フォームのプロパティにフィルター条件を設定する方法があります。
フォームのFilterプロパティに条件を設定し、FilterOnプロパティでフィルターのON・OFFを切り替えます。
先程のDoCmdと同様の処理を行う場合、下記のようになります。
Me.Filter = "TDFKMEI LIKE '*府' "
Me.FilterOn = True
フィルターを解除する場合は、
Me.FilterOn = False
です。
もしくは、
Me.Filter = ""
でも解除されます。この場合、Me.FilterOnは自動でFalseになります。
DoCmd.ApplyFilterも、Filterプロパティも、抽出条件には、WHERE句に記述する条件式を指定します。(WHERE自体は書かなくて良い)
最後に、もっと別の絞り込み方法を紹介します。
レコードソースに、抽出条件を記述したSQLをセットします。
DoCmd.ApplyFilterも、Filterプロパティも、レコードソースに指定されたテーブルやクエリの結果に対して、抽出処理を行っているように思われるので、元々のSQLに条件指定をする方が、処理的に有利な気がします。(余り根拠はありません…)
処理としては、VBAでSQLを組み立てて、それをフォームのレコードソースに設定します。
詳しくは、データ一覧フォーム その3 データ絞込あたりをご覧下さい。
コメント 0