フォーム上で複数項目を自由に組合せて絞込み検索
AccessのHelpは非常に難解でわかりづらく、いろいろなガイドブックも実践に使える内容までは、なかなか踏み込んでいないと思いませんか?
節約というテーマからは、少し遠いけど、これは使えるというAccessの小技を披露します。
まず、1回目は、”表形式のフォームから複数の項目を組合わせて自由に絞込み検索を行う”という優れ技です。
レベル的には中級程度です。
マクロまでは使いますが、Visual Basicは使いません。(使えません?)
”表形式のフォームから複数の項目を組合わせて自由に絞込み検索を行う”
1.例えば、下の図のような表形式のフォームがあります。
フォームは下のようになります。
この表の元となるクエリは下のようになります。
私の経験上、1フォーム1クエリがお奨めです。
一つのクエリを複数のフォームやレポートで共有すると、システムとしてはシンプルですが、後で修正を加えようとすると、分からなくなります。
2.フォーム上に検索のためのコマンドボックスを作ります。
(以下、あくまでも例ですので、皆さんで自由にアレンジしてください。)
今回は、「地域」と「工業団地」の二つを組合わせて検索します。
値集合ソースに「m_地域」というテーブルを使用しました。
ポイントとして、テーブルにコード”99””全地域”という項目を一つ作っておくことです。
もう一つ、「工業団地」という検索用のコマンドボックスを作ります。
3.クエリに次のような抽出条件用の列を追加します。
フィールド名は何でも良いのですが、既存のフィールド名と区別し、分かりやすくするために、私は「XXX?」と決めています。フィールド名とフィールドを定義する計算式との間には”:”(半角)を忘れないように。
式には関数を使いますが、IIF(A = B, C,D)というような条件式です。
EXCELに慣れている人はEXCELのIF関数と同様です。
地域?: IIf([Forms]![f_顧客一覧]![cb_地域検索]=99,99,[t_顧客]![地域cd])
ちなみに、「もし、フォーム上の地域検索のボックスの値が99だったら、99を代入せよ、そうじゃなかったら、テーブルの地域コードの値を代入せよ」というような意味です。
コードはすべて文字ではなく、数値を使うようにしています。条件式で数値と文字の扱い方が違いますので、要注意です。
式は式ビルダを使う方が分かりやすく、ミスも少なくなります。
抽出条件にフォーム上の検索用のコマンドボックスの値を指定します。
検索用のコマンドボックスには、初期値として、”99”を指定しておきます。
つまり、検索用のコマンドボックスが”99””=全地域”だったら、フィールドに”99”が入り、検索条件が”99”だから、全レコードが対象となって抽出され、
検索用のコマンドボックスが”99”でなかったら、具体的なフィールドにはレコードそのものの値が入り、検索条件として、具体的な条件が指定され、抽出される訳です。
4.同じように、工業団地を抽出するための、フィールドを作ります。
5.レコードを表示させるためのマクロを作ります。
これをしないと、最初から抽出条件で絞り込まれた状態となり、全レコードが表示されません。
アクションとして、全レコードの表示を2回繰り返します。
なぜ、2回なのかは、、、、分かりません?。
経験上、2回必要なことにたどりつきました。
フォーム自体が開く時と、検索用のコマンドボックスの値が変更された時に、アクションとして、先ほどの表示のためのマクロを指定します。
6.これで完成です。
自由に絞込みができます。個別の絞込み、組合わせての絞込み、全レコードの表示と自由自在です。
今まで、検索(抽出・絞込み)についていろいろな方法を試しましたが、この方法が一番簡単で、快適です。
役に立ったと思った方は、ご協力ください。
トラックバック(0)
このブログ記事を参照しているブログ一覧: フォーム上で複数項目を自由に組合せて絞込み検索
このブログ記事に対するトラックバックURL: http://nakashima.qee.jp/blog/mt-tb.cgi/95
コメントする