ACCESS クエリの抽出条件でフォームを参照させる方法(VBAコード公開)
ACCESSの選択クエリは、一定の抽出条件に応じたレコードの抽出が可能です。
しかし、実際に業務でACCESSを使用する場合には、固定の抽出条件ではなくユーザーが入力した値に応じて抽出条件を変更しなければならないケースも多く発生します。
例えば、フォームのテキストボックスの値に応じて、クエリの抽出条件を変更する場合などです。
そんな時に利用できる、フォームを入力値をクエリの抽出条件に使用する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
ACCESSで作成したフォーム(完成形)
まずは完成形をお見せしましょう。
こちらは売上検索のフォームです。
このフォームの上段にある検索条件に応じて、下段の検索結果が変わるように設定してあります。
これを実現するために、フォームのレコードソースとしているクエリではどんな設定をしているか見ていきましょう。
フォーム作成
先ほどのフォームをデザインビューで見たのが下記です。
検索条件を入力するコントロールを上部にそろえており、検索結果を表示する下段の一覧部分はサブフォームにしています。
このサブフォームのレコードソースは、「売上検索」というクエリです。
クエリの設定
では、サブフォームのレコードソースになっている売上検索クエリの設定を見てみましょう。
こちらが、クエリのデザインビューです。
クエリの抽出条件部分に、先ほどの売上検索フォームを参照するような記述をしています。
こうした設定をすることで、フォームの検索条件に入力した値に応じてクエリの抽出結果が変わり、そのクエリをレコードソースとするサブフォームの結果を変えることができます。
これによって、検索条件に応じた結果がフォーム上で表示される、というわけです。
クエリの抽出条件にフォームを参照させる方法
では、フォームを参照する場合の抽出条件の設定方法を詳しく見ていきましょう。
完全一致で検索する場合
まず、最もわかりやすい完全一致で検索する場合です。
例えば、フォームの「期間指定To」とクエリの「売上日付」が完全一致するレコードのみを抽出する場合は、
=[Forms]![売上検索]![期間指定To]
と記載します。
内容を分解すると以下の形になっています。
[Forms] | フォームを指定していることを示す |
[売上検索] | フォームの名前が「売上検索」であることを示す |
[期間指定To] | 「売上検索」フォームの「期間指定To」コントロールの値を参照することを示す |
それぞれを「!」でつないで、完成です。
住所のように、指定するコントロールがどこにあるのかを、階層に沿って指定していますね。
上記を応用すれば、自分が指定したいフォームのコントロールで同様のクエリを作成できます。
部分一致で検索する場合
一方、実務では非常によく利用される、部分一致での検索(あいまい検索)の場合です。
フォームの「商品名」とクエリの「商品名」が部分一致するレコードのみを抽出する場合は、
Like ("*" & [Forms]![売上検索]![商品名] & "*")
と記載します。
[Forms]以下の部分は先ほどの完全一致と同じですが、以下の2点が異なります。
・=(イコール)ではなくLikeを使用する
・対象のコントロールを指定する式の前後に”*”を入れる
この記述方法にすれば、部分一致での抽出が可能です。
もちろん、前方一致、後方一致など片側だけを部分一致にさせたい場合は、”*”を前方のみ、後方のみに付与することで設定変更も可能です。
クエリからフォームを参照させる際はこうした記述方法を使用しますので、覚えておくと便利でしょう。
以上、クエリの抽出条件でフォームを参照させる方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。