<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>郵便番号の検索
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15



さて、では3つめのコンボボックス用のクエリーです。[地区テーブル]を基にしたクエリーを作ります。

まずはこんな感じかな。抽出条件はオッケーですよね。ふたつめのコンボボックスを抽出条件に使います。

[市区番号]は多分表示しなくてもよさそうな気がします。表示しないようにしますかね。
で、[地区名][番地][事業所名][郵便番号]と4つフィールドを並べてみました。

で、このクエリーを値集合ソースにする3つめのコンボボックスをフォームに作りましょう。
大きさ、位置、ラベルなどお任せしますので調節してみてください。

コンボボックスの値集合ソースと書式の関係はつかめました?
ちょっとめんどうですけど、関連がありますから、チェックしてしまってくださいね。

上のクエリーを基に考えると、[市区番号]を除いて4つのフィールドがありますよね。
えー、コンボボックスに表示したいのは[地区名][番地][事業所名]の3つかな・・・。
[番地]と[事業所名]は空っぽの場合もありますけども、いちおう場所は空けておかないと。

で、4つめの[郵便番号]なんですけど、これが今回のミソ。
コンボボックスには表示しないけど、後で使います。

なので、とりあえず列数4で、左から3つは列幅あり、4つめの[郵便番号]は列幅ゼロで非表示だけどコンボボックス内には存在してる・・・という状態になります。
リスト行やリスト幅は徐々に調節していきましょう。

びよーん・・・。横にながーいコンボボックスになりました。なんか無駄なような気もしますけど、長い住所もあるんですよね。
残念かな列幅をフォームビューで変えることができないんで、あらかじめ十分な幅を取っておかないとならないんです。

事業所名や番地に関するデータも、少し幅を取っておかないと、役に立たないですよね。
[事業所名]があれば[番地]は出さなくてもいいのかな・・・。うーん・・・と、いろんな住所を表示させて悩んでみましょう。


さて、メイン・イベントです。

コンボボックスの中から、該当する住所の郵便番号を取り出すという処理を作ります。

コンボボックスというのは、単なるフォーム上のコントロールに過ぎないんですけど、コンボボックスの中にちょっとした世界を持ってて、最終的に選択されてるのは「連結列」に記されてる列のデータですけど、その他にも「列数」に指定されてる列数分だけの情報を格納してるんです。

なので、これ、使えるんですよ。

例えば上の例で行くと、このコンボボックスが値集合ソースとしているクエリーの列並びは、[地区名][番地][事業所名][郵便番号]となっています。
左から0,1,2,3....と番号が振られまして、「列数」に指定されてる数、つまり4列分が操作可能。(3)の[郵便番号]まで、フォームの中で参照できますよ、ということなんですね。

このコンボボックスの名前が[コンボ4]だったとすると、このコンボボックスのことを通常

Forms![フォーム1]![コンボ4]

と書きます。で、このコンボボックスの4列め、つまり[郵便番号]のことは

Forms![フォーム1]![コンボ4].Column(3)

と書きます。Columnというのは「列」という意味の、コンボボックス独特のプロパティです。カッコの中身は、上で記した列順。

マクロなど他のオブジェクトからこのコンボボックスをつつくときはこういう書き方ですけど、フォームの中のコード記述ならもちっと省略できますよね。
forms![フォーム名]は自分自身のことなので、

Me![コンボ4].Column(3)

となります。少し楽かな。。。この辺の書き方は、みなさんもう慣れちゃいましたですよね。


さて、では、フォームの右の上の方にでも、ひとつテキストボックスを作ってください。

「非連結」という、単なるテキストボックスですね。大きさや位置はお任せします。
で、このテキストボックスに、コンボボックスの中から[郵便番号]を取ってきて代入します。
あたしは[テキスト6]っていう名前のテキストボックスです。
みなさんのはなんて名前でしょう?
名前は変更しても、そのまんまでもどっちでもいいですが、なんて名前のテキストボックスだかわかんない、ではだめですよ。
必ず意識して確認するようにしましょう。

で、「地区名」のコンボボックス[コンボ4]の更新後処理イベントを作ります。マクロでもコードでもどっちでもよいですよ。

コードでしたらちょっと長いですけど、以下のように1行記述します。

Me![テキスト6] = Me![コンボ4].Column(3)

マクロでしたら、適当なわかりやすいマクロ名をつけて、処理の中身を

アクション:値の代入

アイテム:Forms![フォーム1]![テキスト6]

式:Forms![フォーム1]![コンボ4].Column(3)

フォーム名、テキストボックス名、コンボボックス名は、みなさんの状況に合わせて入力してくださいね。

これでオッケーのはず。
フォームを保存してフォームビューに切り替え、とりあえず「都道府県」「市区町村」「地区名」を各コンボから選択してみてください。

選んだ住所の郵便番号が[テキスト6]に代入されますか?
エラーが出るようでしたら、慎重にエラーの内容を読んで、コンボ4のプロパティとマクロかコードの記述に間違いがないかどうか調べましょう。

もし、上のように、3桁-4桁にしたい場合は、下のようにLeft関数、Right関数を組み合わせてハイフンでつなげます。途中で改行せず、1行で書きます。

Me![テキスト6] =Left(Me![コンボ4].Column(3), 3) & "-" & Right(Me![コンボ4].Column(3), 4)

1120011と続けて7桁、文字列扱いで表示されますんで、こっちの方が便利な場合もあるんですが、3桁4桁で区切りたいときは、左から3桁ハイフン右から4桁、と、3つの要素を作って、それぞれ&でつなげます。ハイフンはむき出しでは引き算の演算記号とされてしまい、引き算しようとしてしまいますので、「そのまま横棒として表示してほしいんだよ」という意味でダブルコーテーションで囲みます。

どうでしょう。出ますか?

ご自宅の住所、会社、学校・・・いろんなところの住所検索してみてくださいね。


さて、これでだいたいオッケーなんですけど、3番目の地区名のコンボボックス、なんか使いにくいと思いません?
これは好みですけども・・・。
さらに3番目、4番目の絞り込みがあるならコンボボックスの方がいいですけども、もうすこし間口が広いというか、見晴らしのいい表示方法はないもんか、と模索してみようかと思うんです。

まず手っ取り早いのが「リストボックス↑」。
プロパティなどはほとんどコンボボックスと同じですので、形を変えて大きさを整えるだけですぐ使えますよ。やってみましょうか。

いや、もうコンボボックスの状態でいい、という方はさーっと読み流してください。

フォームをデザインビューに切り替えて、[地区]のコンボボックスを右クリックしてみてください。
ちょっとわかりにくいですけど、ショートカットメニューの中に「コントロールの種類..」というのがあると思います。

コンボボックスは、リストボックスに姿を変えることができるんです。選択できました?

リストボックスになったら、大きさや配置を整えましょう。
上の例のように、ラベルを削除しちゃってもっと横にスペースを取れるようにしてもよいと思います。
コンボのように「クリックしないと中身が出ない」わけじゃないんで、見晴らしはちょっといいですよね。

で、クリックすれば、ちゃんと4番目の列の値がテキスト6に代入されますよね。
ここんとこはコンボボックスにしようがリストボックスにしようが、仕組みは同じです。

こっちの方が見やすいかな・・・。みなさんはどう思います?


さて、コンボボックスもリストボックスも手っ取り早くていいんですけど、ネックは「2行3行の表示ができない」ってことでしょうか。
ながーい住所とか、会社名とか・・・参照するだけならある程度右端がちょん切れちゃっても、スペースの関係で泣く泣くあきらめないとってこともありますよね。

そうなるともう、サブフォームに頼るしかないかな・・・。これもピッタシした解決策じゃないんですけどね。やってみましょうか。

このフォームはどっか出しっぱなしでよいので、隅っこの方に移動させておいて、別のフォームを新規作成します。
えー、Q_地区(最後のコンボorリストボックスが使ってるクエリー)を基にした表形式のフォームを、ウィザードかオートフォーム機能を使って作りましょう。

表形式のフォームは、「詳細」という場所の幅を広げて、あたかも2段3段に表示されているように見せることもできるんですね。
ちょっと工夫しないと、返って見にくくなっちゃいますけど・・・。何事もやってみるってことで、うまいこと配置を考えてみてください。

もとにしているテーブル(地区テーブル)のフィールドのサイズが50桁以上に設定されていたりすると、テキストボックスに自動的にスクロールバーが設定されてたりします。頼んでもないのに。
テキストボックスにスクロールバーがあって助かる場合もありますけど、今回はいらないかなーという場合は、そのテキストボックスの書式プロパティを見て、「スクロールバー:あり/なし」の設定を変更しましょう。

うまいこと配置できました?

あー・・・あんまり見やすいフォームは作れないですけど・・・。
後はたとえは、詳細セクションに太めの横線を引くとかして、区切り部分をもっとはっきりさせたり、テキストボックスを立体じゃなくてフラットにして目に優しい色使いにしたり・・・。

一行おきにしましま表示でもできるといいんですけど、フォームではそれはちょっと難しいんで・・・。



後は、このフォーム全体のプロパティを見て、レコードの「追加の許可」を「いいえ」にしておけば、うっかりデータの追加入力しちゃったりってこともなくなると思うんで、その辺も工夫してみてください。

レコードセレクタとか移動ボタンとか、スクロールバーも横向きのはいらないでしょう。

あ、あと、各テキストボックスの中にカーソルが入ったりフォーカスが移動したり(文字が黒い反転表示の状態)するのがなんとなくいやだ、という場合は、各テキストボックスのデータプロパティに「使用可能」「編集ロック」というプロパティがありますから、これを使って使用できない状態にしてしまうとよいと思います。

リストボックスやコンボボックスと違って、ここから書き換えができちゃいますからね。
ただ参照したいだけの場合は、うっかりキーボードに腕を付いて「よこはま東急百貨店」が「んんんんんんん」に書き換わっちゃったーなんて不慮の事故も避けることができますよね。

あたしはあと、郵便番号の文字の色だけ変えてみました。

オマケのお話が多くなっちゃいますけど、この郵便番号を4桁3桁にしたいときは、以下の操作を・・・。

1)テキストボックスの名前を、[郵便番号]以外のものに変更。([郵便番号1]とか・・)

2)1)のコントロールソース欄を以下のように書き換え

 =Left([郵便番号],3) & "-" & Right([郵便番号],4)

原理は同じです。ただ、このままだと、自分自身の数字を使って計算式を作って自分自身に表示する、みたいな、いわゆる循環参照って奴になっちゃうんで、テキストボックスの名前は必ず変えてください。