フォーム上で複数項目を自由に組合せて絞込み検索

AccessのHelpは非常に難解でわかりづらく、いろいろなガイドブックも実践に使える内容までは、なかなか踏み込んでいないと思いませんか?

節約というテーマからは、少し遠いけど、これは使えるというAccessの小技を披露します。

まず、1回目は、”表形式のフォームから複数の項目を組合わせて自由に絞込み検索を行う”という優れ技です。

レベル的には中級程度です。

マクロまでは使いますが、Visual Basicは使いません。(使えません?)

人気blogランキングへご協力ください。↓↓↓

表形式のフォームから複数の項目を組合わせて自由に絞込み検索を行う”

1.例えば、下の図のような表形式のフォームがあります。

Access01

  フォームは下のようになります。

Access02

この表の元となるクエリは下のようになります。

私の経験上、1フォーム1クエリがお奨めです。

一つのクエリを複数のフォームやレポートで共有すると、システムとしてはシンプルですが、後で修正を加えようとすると、分からなくなります。

Access03

2.フォーム上に検索のためのコマンドボックスを作ります。

(以下、あくまでも例ですので、皆さんで自由にアレンジしてください。)

今回は、「地域」と「工業団地」の二つを組合わせて検索します。

値集合ソースに「m_地域」というテーブルを使用しました。

ポイントとして、テーブルにコード”99””全地域”という項目を一つ作っておくことです。

Access04

もう一つ、「工業団地」という検索用のコマンドボックスを作ります。

Access05

3.クエリに次のような抽出条件用の列を追加します。

  フィールド名は何でも良いのですが、既存のフィールド名と区別し、分かりやすくするために、私は「XXX?」と決めています。フィールド名とフィールドを定義する計算式との間には”:”(半角)を忘れないように。

式には関数を使いますが、IIF(A = B, C,D)というような条件式です。

EXCELに慣れている人はEXCELのIF関数と同様です。

地域?: IIf([Forms]![f_顧客一覧]![cb_地域検索]=99,99,[t_顧客]![地域cd])

ちなみに、「もし、フォーム上の地域検索のボックスの値が99だったら、99を代入せよ、そうじゃなかったら、テーブルの地域コードの値を代入せよ」というような意味です。

コードはすべて文字ではなく、数値を使うようにしています。条件式で数値と文字の扱い方が違いますので、要注意です。

Access08 

式は式ビルダを使う方が分かりやすく、ミスも少なくなります。

Access06

抽出条件にフォーム上の検索用のコマンドボックスの値を指定します。

検索用のコマンドボックスには、初期値として、”99”を指定しておきます。

つまり、検索用のコマンドボックスが”99””=全地域”だったら、フィールドに”99”が入り、検索条件が”99”だから、全レコードが対象となって抽出され、

検索用のコマンドボックスが”99”でなかったら、具体的なフィールドにはレコードそのものの値が入り、検索条件として、具体的な条件が指定され、抽出される訳です。

Access07

4.同じように、工業団地を抽出するための、フィールドを作ります。

Access10

5.レコードを表示させるためのマクロを作ります。

  これをしないと、最初から抽出条件で絞り込まれた状態となり、全レコードが表示されません。

アクションとして、全レコードの表示を2回繰り返します。
なぜ、2回なのかは、、、、分かりません?。
経験上、2回必要なことにたどりつきました。

Access11

 フォーム自体が開く時と、検索用のコマンドボックスの値が変更された時に、アクションとして、先ほどの表示のためのマクロを指定します。

Access12

Access13

6.これで完成です。

自由に絞込みができます。個別の絞込み、組合わせての絞込み、全レコードの表示と自由自在です。
今まで、検索(抽出・絞込み)についていろいろな方法を試しましたが、この方法が一番簡単で、快適です。

Access14

役に立ったと思った方は、ご協力ください。

人気blogランキングへご協力ください。↓↓↓

トラックバック(0)

このブログ記事を参照しているブログ一覧: フォーム上で複数項目を自由に組合せて絞込み検索

このブログ記事に対するトラックバックURL: http://nakashima.qee.jp/blog/mt-tb.cgi/95

コメントする

このブログ記事について

このページは、節約おやじが2007年8月18日 01:13に書いたブログ記事です。

ひとつ前のブログ記事は「近くの川へ川釣りへ行きました。」です。

次のブログ記事は「久しぶりに花苗を買いました。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01