テーブルを使って検索用フォームを作る

こんにちはmasalifeです。

今回はテーブルを使って検索用フォームを作ってみたいと思います。

作る検索用フォームは次のイメージです。

フィルタとフィルタの解除機能だけというシンプルな検索フォームです。

簡単なVBAコードで作成できます。

今回はテーブルを使って作成するやり方を紹介しますが、

クエリを使って作ってみたいという方はこちらの記事を参考にしてください。

それでは作っていきましょう。

・DoCmd.ApplyFilterメソッド(VBA)

・DoCmd.ShowAllRecordsメソッド(VBA)

準備するもの

検索対象の元となるテーブル

検索用のフォームに表示する元のテーブルは必ず必要です。

用意するテーブルは各自の使いやすいものを使用してください。

ただし、今回の場合は文字列の検索となるので、

検索対象のフィールドのデータ型は短いテキストとしてください。

検索用フォーム

フォームのプロパティ

次の2点は必ず同じ設定をしてください。

・レコードソース:【1.1 検索対象の元となるテーブル】で準備したテーブル
・規定のビュー:帳票フォーム

今回はテーブルを使った検索用フォームを作るので、テーブルをレコードソースとします。

帳票フォームとすることで、データが一覧で確認でき、検索(フィルタ)の動作がつかみやすいです。

検索ワードを入力するテキストボックス

非連結のテキストボックスを作成します。

【デザイン】タブの赤枠のアイコンでテキストボックスが作成できます。

フィルタを解除するボタン

ボタンを作成します。

ボタンに表示する表題は自由に付けてください。

【デザイン】タブの赤枠のアイコンでボタンが作成できます。

抽出機能を実装する

テキストボックスのイベントにVBAを記述する

検索ワードを入力するテキストボックスに検索(フィルタ)機能をVBAで設定します。

今回は、入力した文字を含む来店者を検索できるようにします。

テキストボックスのプロパティシートを出して、

【イベント】タブの更新後処理の【…】アイコンをクリックします。


【コードビルダー】を選択し、【OK】ボタンをクリックします。

VBE画面が起動します。

・イベントは、オブジェクト(今回の場合はテキストボックス)に対してユーザーが行う操作などで発生します。

・更新後処理イベントはデータが入力され、データが確定した後に発生するイベントです。

・値がテキストボックスに入力された後にイベントプロシージャ(VBAコード)を実行するようにします。


DoCmd.ApplyFilter “”, “[T_来店情報_累積ID付]![来店者] Like “””” & [Forms]![F来店者情報検索]![txt来店者検索] & “””””

と記述します。

これで抽出機能の実装が終了です。

試しに、抽出したい来店者の名前を入力して、Enterを2回押すなどしてデータを確定してみてください。


正しく結果が得られると思います。

DoCmd.ApplyFilterメソッドを読み解く

構文

DoCmd.ApplyFilter(FilterName, WhereCondition, ControlName)

 名前説明省略の可否 
 FilterNameカレント データベースの フィルターまたは
クエリの有効な名前を表す 文字列式を
指定します。
可能
WhereCondition 有効な SQL WHERE 句を文字列式で
指定します。
可能
ControlName可能

*Micorosoftドキュメントより引用

WhereConditionにフィルタをかける条件を記述する

DoCmd.ApplyFilterはWhereConditionにフィルタをかける条件を文字列式で記述すれば動きます。

その他の引数は使用したことがなく、理解していなくても問題ありません。

それでは、今回記述したWhereCondition

“[T_来店情報_累積ID付]![来店者] Like “””” & [Forms]![F来店者情報検索]![txt来店者検索] & “””””

を整理してみます。


検索用フォームのコントロールソースに指定したテーブル(T_来店情報)の来店者フィールドに対して、Like演算子を用いてテキストボックス(txt来店者検索)に入力された文字を含むレコードをフィルタしています。

Like演算子が分からないという方ははこちらの記事を参考にしてみてください。

フィルタの解除機能を実装する

ボタンのイベントにVBAを記述する

ボタンにフィルタ(抽出)の解除機能をVBAで設定します。

ボタンのプロパティシートを出して、

【イベント】タブのクリック時の 【…】 アイコンをクリックします。


【コードビルダー】を選択し、【OK】をクリックします。

VBE画面が起動します。


DoCmd.ShowAllRecordsと記述します。

・今作業中のテーブル、クエリの結果セット、またはフォームに適用されているフィルターを解除します。*Microsoftドキュメントから引用

これでフィルタの解除機能の実装が終了です。

抽出がかかった状態から、ボタンをクリックして動作を確認してください。

これで簡易的な検索用フォームの完成です。

お疲れ様でした。

さいごに

DoCmd.ApplyFilterメソッドのWhereConditionを書き換えれば様々な抽出方法に対応できるのでとても便利です。

ぜひ試してみてください。

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

>ちょっとした悩みを解決        

ちょっとした悩みを解決        



「こういう内容を記事に残してほしい」「これってどうやるの」等、意見・要望があればご連絡ください。
ちょっとでもお役に立てるブログにしていきたいなと思っております。
よろしくお願いいたします。