ACCESS VBA DoCmd.ApplyFilterの使い方

DoCmd.ApplyFilterの使い方

ACCESSでフォームのレコードを抽出する方法はいくつかあります。
今回はその中で、DoCmd.ApplyFilterの使い方をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

DoCmd.ApplyFilterとは

DoCmd.ApplyFilterとは、フォームに表示されたレコードを一定の条件で抽出するためのメソッドです。
以下の構文で利用します。

一つ目の引数のフィルター名は必須ではありませんので、2つ目のフィルター条件を指定すればレコードの抽出が可能です。
例えば、以下のように記述します。

上記の例では2つ目の引数に設定したフィルター条件で、商品名がフォームの「商品名検索」テキストボックスに入力された値を含むレコードのみを、フォーム上の「売上明細サブフォーム」に表示する、という処理を行っています。

DoCmd.ApplyFilterの利用例

では実際にフォームでDoCmd.ApplyFilterを利用した機能を作ってみましょう。
以下は売上伝票の入力フォームです。

赤枠の商品名検索に文字を入れて検索ボタンを押すと、下段の売上明細を絞り込みできるようにしたいと思います。

このフォームはメインフォームとサブフォームからできています。
デザインビューで見ると以下のようになっており、売上明細部分がサブフォームになっていることがわかります。

今回作成する処理では、メインフォームの商品名検索テキストボックスに入力した値をもとに、サブフォームにフィルターを適用する必要があります。
そこで、検索ボタンをクリック時のイベントとして以下のプロシージャを設定しました。

最初のIf分は、商品名検索テキストボックスに値が入っているか否かを判定しています。
値が入っていなければ特に処理を行わず、値が入っていれば次の処理を実行するようにしています。

そして、実際に実行する処理が今回のテーマであるDoCmd.ApplyFilterを使ったフィルター処理です。
こちらでは、メインフォームの商品名検索テキストボックスの値をMe!商品名検索で取得し、適用先のコントロールに売上明細サブフォームを指定することで、フィルターを実現しています。

実際にフォームビューで動作を確認しましょう。

商品名検索テキストボックスに「追加」と入力して検索ボタンを押してみます。
すると、売上明細サブフォームにフィルターが適用され、「追加」の文字が入っているレコードのみが表示されました。

このように、DoCmd.ApplyFilterはメインフォームからサブフォームに対してフィルターをかける際などに便利です。

Me.Filterとの違い

フォームでレコードの抽出をする際によく利用するのが、Me.Filterです。
Meがアクティブなフォームを指しますので、アクティブなフォームのFilterプロパティを使ってレコードを抽出するもので、非常に使い勝手が良いです。

一方で、アクティブなフォームに対するフィルターに限定されてしまうため、今回のようにサブフォームにフィルターを適用したい場合にはMe.Filterでは対応できません。
サブフォームなどのアクティブではないフォームにフィルターを適用した場合にDoCmd.ApplyFilterを利用すると便利です。

以上、DoCmd.ApplyFilterの使い方をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。