<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--2段階の絞込み
  1 → 2 → 3



フォームから、コンボボックスやテキストボックスを使って、2段階の絞込みをする仕組み、作ってみましょう。そんなに難しいことじゃないですけど、気をつけなくちゃいけないとこがいくつかあるので、その辺中心にお話しますね。
他のコーナーの解説とちょっとダブっちゃうとこもありますけど、なるべくわかりやすくお話しますのでしばらくお付き合いくださいまし。



まずは下準備・・・。下のようなテーブルがあります。

で、まず「グループ」で絞り込んで、次に「素材」で絞り込むようにしようと思います。
このテーブルを基にしたクエリを作ります。

まずは、2段階の絞込みを実現するためには、抽出条件をふたつつくることになります。
「いも」で「さつまいも」のレコードだけゲットしてくるって場合は、こうなりますね。ダブルコーテーションは自動的につきますから、「いも」とだけ入力をします。
「いも」で「さつまいも」のレコードだけに絞り込まれてきますよね。

まだ未完成ですけど、とりあえず、このクエリに名前を付けて保存しときましょう。
ええと、クエリAとでもつけようかな。



で、このクエリAを基にして、表形式のフォーム作ってみてください。とりあえず今は、「いも」で「さつまいも」のものだけ出てきますよね。
んじゃ、このフォーム、名前付けて保存しましょう。わたしは、フォームAっていう名前にしました。あ、標題は「おしながき」にしてますけど、フォームの名前はフォームAです。全角半角、気をつけて名前付けてください。

で、フォームヘッダーのところを利用して、コンボボックスをふたつ作ってください。

わたしのは「コンボ14」「コンボ16」って名前になりました。わかりやすい変えた方がいいんですけど・・・。今日は練習なので、このまま説明しちゃいますね。コンボボックスの名前がどこでどう関係してくるか、その辺を押さえちゃってください。

さて、コンボボックスの「データプロパティ」を見ます。「値集合ソース」を作ります。基にするのは「テーブルA」です。
なんかメッセージが出てくることもあると思いますけど、このまま「はい」のボタンをクリックしてください。

で、この画面の中に、コンボの中に表示してほしい値をとれるよう、ちょっとしたクエリを作るんでしたよね。

でも、ただ「グループ」を選んだだけだと、「いも」が4行出てきたり、「まめ」が5行出てきたり・・・間違いじゃないけど、なんか余分な表示がいっぱい出てくるようになっちゃうんです。
だって、テーブルの中の「グループ」列を全部表示させるんだから、30レコードあったら30行分、まめだのいもだの出てくるとになりますよね。

こういう場合は、クエリのプロパティで調節することができます。どっかクエリのなかのグレーのトコを右クリックしてください。メニューが出てきますよね。で、「プロパティ」を選びます。
こんな画面が出てきますので、「固有の値」っていうのを「はい」にしましょう。これで、ダブってるやつは非表示になるのです。

ちょっと試してみましょう。
そーっとデータシートビューに切り替えてみてください。

ね?いもとまめだけになってるでしょう。

こういうふうにコンボに出てきてくれればオッケーですよね。
で、このウィンドウだけ、閉じます。閉じるときこんな感じのメッセージが出てきますが、「はい」のボタンをクリックしてください。 


次に、同じ要領で「コンボ16」の値集合ソースも設定します。途中までは同じです。

ふたつ目のコンボは、状況によって異なりますけど・・・今回は、「いも」って選んだら「さつまいも」「じゃがいも」「さといも」「やまいも」って絞り込まれた結果が、ふたつ目のコンボの中に出てきてほしいなって思ってます。
だって、どう見たってテーブルの中には、「いも」で「えだまめ」の料理は存在しないですから、「いも」っていわれたら、「えだまめ」とか「えんどうまめ」はふたつ目のコンボに出さなくてもいいんじゃないですかね。って思うんです。

なので、今回は、ただ「素材」という列を選んで「固有の値=はい」にするだけじゃなくて、「グループがコンボ14の中身と同じもの」っていう条件を加えてやります。
でも、べつに「グループ」の列はコンボ16の中に出てこなくってもいいから、表示しないようにしておきます。

たぶん、こいつはデータシートビューにしてテストするのややっこしいと思うんで(Formsとか入れてるから、フォームAが開いてないと「パラメータの入力」とかいう画面が出てきめんどくさいから、先に進もう)こいつはこのまま閉じてください。
閉じるのは、右上の閉じるボタンですよね。メッセージが出てきますけど、「はい」のボタンをクリックします。

ここまでは、絞込みの仕組みとかと関係なくて、単に「コンボボックスに何を表示させるか」という設定ですんで、ごちゃごちゃにならないようにしてくださいね。


んじゃ、ちょっとテスト。フォームをフォームビューに切り替えて・・・あり?
コンボ16、何にも出ないや。。。

あ、そうか。コンボ16の中身は、コンボ14を選んだ後、決まるわけですし、再クエリしないといけないですね。どうもいつもうっかり忘れちゃうよ。
コンボ14の方の、更新後処理のイベントを作ります。

 マクロで作るなら、1アクションだけ・・・「再クエリ」(コントロール名:コンボ16)
 コードで作るなら、1行だけ・・・ DoCmd.ReQuery “コンボ16”

どっちでもオッケーです。コードで書くときは、コンボの名前をダブルコーテーションで囲むのを忘れずにね。

わたしはコードで書こうかな。


んじゃ、フォームビューに切り替えて・・・。
コンボ14の「更新後処理」に再クエリするようにしているんで、コンボ14から改めていもかまめを選んでみてください。んでないと再クエリされないし・・・。
でます???
とりあえずここまでできれば一段落。これからやっと絞込みの仕組みを作ります。ふう。がんばりましょう。