<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>コンボボックスを使った絞込みのしくみ
   



ふたつめのコンボボックスを作る

では、ふたつめのコンボボックスを作りましょう。
ひとつめのときと同様、ツールボックスから「コンボボックス」ボタンをクリックして、フォーム上にコンボボックスを作ります。

わたしのは、「コンボ2」っていう名前になりましたよ。2っていう数字は半角ですね。
みなさんは、なんて名前になりました?

そしたら、コンボ2のプロパティも設定しましょう。

今度は、このコンボボックスにどういう値を表示させたいか・・・を考えます。
都道府県の一覧を出したいんですけど、ただ単に47都道府県のリストを出すんじゃなくて、「こんぼ前のコンボボックスで、関東 って選んだら、茨城、栃木、群馬、埼玉、千葉、東京、神奈川って出るようにしたい、んですよ。できますかね?え?それを教えるのがお前の仕事じゃないかって???



わかりましたよ・・・。やってみましょう。
今回は、こんな感じのテーブルを用意してます。

47都道府県が、どの地域に属するのかを分類したテーブルです。
分類には、[地域コード]を使ってまして、これが3列目に並んでます。

なので、[地域コード]が、コンボ0の内容と同じものだけ と、値集合ソース欄に指定してやればよいわけです。

「値集合ソース」プロパティをクリックして、右端に何かちっさいボタンが表示されたら、一番右端の奴をクリックしましょう。
ビルドボタンといいます。

と、↓こんな感じの画面が出てきます。クエリ作る画面みたいですね。
でも、クエリを作るんじゃないんですよ。これから、SQLという「データベース言語」を使った構文を作ります。
慣れてない人には、SQLって書きにくいと思うんで・・・
そこで、クエリのデザインビューもどき画面を使って、マウスでちょいちょいと操作をして、SQL文を作っちゃいましょう、というわけなんです。

では、まず、このコンボに表示させたいテーブルを選びます。ダブルクリックすればOKです。
そうすると、[都道府県テーブル]のフィールド一覧が、左側(後ろ側に見えてるウィンドウ)に表示されます。
表示されたことを確認したら、「テーブルの表示」ウィンドウを閉じます。

で、下のように↓コンボボックスで扱いたいフィールドを選び出し、抽出条件を加えます。

抽出条件には、「フォームという名前のフォームの中の、コンボ0というコントロールの値」 という意味の式を書きます。
半角のビックリマークで区切って入力します。半角全角の区別に注意しながら入力してください。

Enterキーなどを押すと、勝手に半角のカギカッコがつきます。
これでOK。

いろいろな仕組みの組み合わせで、初めて「コンボボックスによる絞込み」ができるようになるんですね。

 ・どうして[地域コード]のところに抽出条件を書くのか
 ・どうして forms!フォーム!コンボ0 なのか

を、しっかり把握してくださいね。
でないと、応用利かなくなっちゃいますからね。

 ・1列目は 都道府県コード<<都道府県名が、北のほうからずっと順番に並ぶように用意したフィールド。
 ・2列目は 都道府県名。
 ・3列目は 地域コード。抽出条件のために選択した列なので、コンボボックスでは使わない。

という並び順になっていることも、確認しておいてくださいね。

確認ができましたら、クエリビルダのウィンドウを閉じます。保存はしませんよ。SQL文を書くために使ってるだけですからね。
閉じるとき、↓こういうメッセージが出ます。

「はい」のボタンをクリックすれば、クエリビルダで作ったクエリがSQL文になって、「値集合ソース」欄に書き込まれます。



値集合ソース欄に、何かしら文字や記号が入ったと思います。
こういうのを直接書ければそれにこしたことはないんですけど、めんどくさいですからね・・・。SQLって、記号の使い方とかが、データベースによって若干違うこともあるし。こういうお助けビルダ機能があるなら、活用したほうがいいですよ。

で、↓他のプロパティを調整しましょう。書式のプロパティを調節して、2列目の[都道府県名]だけが表示されるようにします。

もし、コンボに表示される値の数が多そうだったら、「リスト行数」っていうプロパティを増やしてもいいかもしれないですね。
デフォルトは8なので、9件以上ある場合は、スクロールバーが縦に出ます。

で、仕上げです。
このままじゃ、だめですやね。

ふたつめのコンボボックスの内容は、[地域コード]が、コンボ0の内容と同じものだけ です。

フォームは、「開いたときの状態」をずっと表示しようとします。
フォームを開いてから、コンボ0の値を選択しなおしても、ふたつめのコンボボックスは絞込みのしなおしをしないのです。

だから、「ひとつめのコンボボックスの値を選択しなおしたら、ふたつめのコンボボックスの絞込みをしなおしておけ」という命令を、どっかで下さないといけないのです。
いろんなやり方がありますが、一番メジャーなのが「再クエリ」じゃないでしょうかね。

プロパティシートの上部分に、コントロールを切り替えるコンボがあります。
こいつをクリックして↓、「コンボ0」のプロパティ表示に切り替えましょう。

で、「更新後処理」っていうプロパティを探してクリックします。右端にボタンが出てくるので、右側のビルドボタンをクリックします。

マクロでもコードでもどっちでもできるんですけど、わたしはコードのが簡単だと思います。
コードなんて絶対にいやだ、という人もいますが、今回みたいなちょっとした処理の場合は、コードのが簡単ですよ。

コードビルダを開くと、上のような画面が出てきます。
Visual Basic Editor(VBE)というウィンドウです。いわゆる、Visual Basic for Applicationっていうプログラム言語で何かしらプログラムを作成するときに使うエディタです。

既に、2行ほど何かしら表示されてますので、この間に、「コンボ2を再クエリしなさい」という命令文を書き足します。

これでOKです↑

なんでこういう書き方をするのか、ってところは、VBAの基本的な構文の書き方と、MS-Accessのオブジェクトやコントロールの構造などを理解しないとならないところなので、今回はそのまま書き写してください。といってもコピー&ペーストってのはだめですよ。入力はトライしてください。今日は練習ですからね。

で、VBEのウィンドウだけ閉じます。

コンボ0の「更新後処理」欄に、イベントプロシージャという文字が出てきましたね。
コンボ0の「北海道・東北」から「関東」に変更したら、コンボ2を再クエリする、という意味合いの処理が完成したことになります。

では、フォームを上書き保存して(左上のフロッピーディスクの絵のツールボタンで)、一呼吸置きましょう。

そしたら、フォームビューに切り替えて、実験です。

ひとつめのコンボでどこか地域を選んだ後、ふたつめのコンボを開いたら・・・出てきます?