こんにちはmasalifeです。
今回はオプショングループとオプションボタンを使って、レコードソースがテーブルの検索フォームにフィルタをかける方法を紹介します。
作成する機能は次のとおりです。
フィルタをかけたい購入品のオプションボタンをクリックすると、該当の項目でフィルタがかかる
というシンプルな機能です。
今回のように、購入品というカテゴリー化された項目の中で、1つを選択しフィルタをかける
という場合はオプショングループを使用するととても便利です。
検索フォームは需要が高いので、ぜひ機能の幅を広げてみてください。
検索フォームやオプショングループ・ボタンの準備がしてある方は【2.オプショングループにVBAを設定する】から読んでください。
・Select Caseステートメント(VBA)
・Filterプロパティ/FilterOnプロパティ(VBA)
検索フォームにオプショングループとオプションボタンを設置する
検索フォームのプロパティを準備する
検索フォームを作成し、次のプロパティに設定します。
レコードソース: | 任意のテーブル |
規定のビュー: | 帳票フォーム |
今回はレコードソースがテーブルのフィルタ方法となるので、必ずレコードソースはテーブルを設定してください。
規定のビューを帳票フォームとすることで、データが一覧で確認でき、フィルタの動作がつかみやすいです。
ウィザードを使って、オプショングループとオプションボタンを作成する
オプショングループとオプションボタンはウィザードを使うと簡単に作成できます。
【フォームデザイン】タブの赤枠アイコンをクリックします。
設置したい場所でクリックします。
オプションボタンに付けるラベル名を指定します。
フィルタをかける項目と同じ名前を付けるのが一般的です。
ラベル名の入力が終わったら、【次へ】をクリックします。
今回はフォームを立ち上げた時点ではどのオプションボタンも選択されていない状態にするので、「規定のオプションを設定しない」を選択します。
もし、あらかじめ選択された状態にしたいオプションボタンがあれば「次のオプションを規定にする」を選択し、該当のラベル名を入力します。
選択したら、【次へ】をクリックします。
オプションボタンの値を設定します。
*重要な部分なので、詳細は後述します。こだわりがなければ、特に変更する必要はありません。
【次へ】をクリックします。
今回はオプションボタンをフォームのフィルタをかけるのに使用するので、「後の作業で使用する」を選択します。*オプションボタンの値をテーブルに保持するわけではないという意味
【次へ】をクリックします。
オプションボタンを選択します。
【次へ】をクリックします。
フィルタをかける項目が分かりやすい標題を付けます。
【完了】をクリックします。
フォームにオプショングループの設置ができました。
好みで縦横は変えてください。
オプショングループの名前を変更する
VBAでコントロールを指定するときに分かりやすいので、オプショングループの名前を変更します。
オプショングループの枠線部分をクリックして、オプショングループのプロパティシートを出します。
【その他】タブの【名前】をopg購入品とします。
*任意の名前で大丈夫ですが、オプショングループのコントロールであることが分かりやすくなるので、opgのプレフィクス(接頭辞)を使用するのをオススメします。
オプショングループにVBAを設定する
オプショングループの更新後処理イベントに次のVBAを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Private Sub opg購入品_AfterUpdate() Select Case opg購入品 Case 1 Me.Filter = "[購入品]='A'" Me.FilterOn = True Case 2 Me.Filter = "[購入品]='B'" Me.FilterOn = True Case 3 Me.Filter = "[購入品]='C'" Me.FilterOn = True Case 4 Me.Filter = "[購入品]='D'" Me.FilterOn = True End Select End Sub |
更新後処理イベントの設定方法が分からない方は↓を参考にしてください。
購入品の枠線(オプショングループ)をダブルクリックしてプロパティシートを出します。
【イベント】タブの【更新後処理】の【…】アイコンをクリックします。
【コードビルダー】を選択して、【OK】をクリックします。
VBE画面が起動するので、上記VBAを貼り付けてください。
フィルタがかかる仕組みを考える~VBAを読み解く~
Select Case ステートメント:オプショングループの値で該当項目のフィルタをかける
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Private Sub opg購入品_AfterUpdate() Select Case opg購入品 Case 1 Case 2 Case 3 Case 4 End Select End Sub |
オプショングループで選択した項目(購入品)でフィルタをかけるために、Select Caseステートメントを使用しています。
Select Caseステートメントについて詳しく知りたい方はこちらを参考にしてください。
こんにちはmasalifeです。 今回は条件分岐の処理に使用するSelect Caseステートメントを紹介します。 条件分岐といえばIfステートメントを思い浮かべる方が多いと思いますが、 IfステートメントよりS[…]
3 |
Select Case opg購入品 |
この部分がポイントです。
処理をオプショングループの値で分岐させますという内容となるのですが、
オプショングループの値って??
と悩まれる方もいると思います。
オプショングループの値は「オプショングループに含まれるコントロールの中で、選択されているコントロールのオプション値がオプショングループの値」となります。
今回の例でいうと、
購入品Aのオプションボタンが選択されている場合は、購入品Aのオプション値の1がオプショングループの値となります。
オプションボタンごとのオプション値はウィザードで設定をしています。
オプショングループウィザードで設定した値はプロパティのオプション値で好きな値に変更できますが、重複した値を設定しないように注意してください。
購入品を選択するたびに、オプショングループの値が更新する仕組みを利用して、更新後処理イベントにVBAを設定しています。
Filterプロパティ/FilterOnプロパティ:フィルタをかける
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Private Sub opg購入品_AfterUpdate() Select Case opg購入品 Case 1 Me.Filter = "[購入品]='A'" Me.FilterOn = True Case 2 Me.Filter = "[購入品]='B'" Me.FilterOn = True Case 3 Me.Filter = "[購入品]='C'" Me.FilterOn = True Case 4 Me.Filter = "[購入品]='D'" Me.FilterOn = True End Select End Sub |
Filterプロパティ/FilterOnプロパティを使用してフィルタをかけています。
【書式】
オブジェクト.Filter = 条件式
オブジェクト.FilterOn = TrueまたはFalse
*このフォームという意味でオブジェクトはMeとする
オプション値に対応した抽出条件(オプション値が1なら購入品A)を指定します。
*””(ダブルクォーテーション)で囲われているので文字列のA〜Dは ‘ (シングルクォーテーション)で囲う必要があることはポイントとして抑えてください。
さいごに
フォームにフィルタ機能があると、ユーザビリティが高まるのでぜひ色々な作り方を覚えてほしいなと思います。
これからもフィルタに関連する記事を作成していくので、
興味のある方は画面右上のMenuのタグで「フィルタ」の記事を参考にしてください。
最後まで読んでいただきありがとうございました。