SSブログ

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 データ絞込あたりをご覧下さい。 


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。