Accessのコンボボックスについてお探しですね。

広告

入力がめちゃくちゃ楽になる!Accessコンボボックスの使い方と「連動ワザ」

Microsoft Accessでデータ入力のフォームを作るとき、絶対に覚えておきたいのが「コンボボックス」です。

プルダウンメニューみたいなやつですね。

これを使えば、入力ミスがグッと減るし、難しいID番号を覚えなくても、普通の名前を選ぶだけでデータを入力できるようになります。

ただ、最初にウィザードで作っただけだと、「IDじゃなくて名前を表示したいんだけど…」とか「大分類を選んだら、小分類が自動で絞り込まれるようにしたい!」みたいな、ちょっと高度なことをやろうとすると、どうすればいいか分からなくなっちゃいますよね。

この記事では、コンボボックスの基本的な設定から、実際の仕事でめちゃくちゃ使える「連動(絞り込み)」のテクニックまで、分かりやすく説明していきます。

まずは基本から!コンボボックスの「値集合ソース」って何?

Accessのフォームにコンボボックスを置くとき、ウィザードを使う人が多いと思います。

でも、後から設定を変えたいときのために、「プロパティシート」の見方を知っておくと便利です。

コンボボックスの設定で一番大事なのが、「コントロールソース」と「値集合ソース」の違いを理解することなんです。

この2つがごちゃごちゃになると、データが保存されなかったり、リストに変なものが表示されたりして困ってしまいます。

「コントロールソース」は、選んだ値を「テーブルのどこに保存するか」を決める場所です。

ここが空っぽだと、フォームで選んでもテーブルには何も記録されません。

一方、「値集合ソース」は、「リストに何を表示するか」を決める場所です。

ここには別のマスターテーブルやクエリを設定したり、直接値を入力したりします。

ちゃんとしたデータベースを作るときは、商品マスターとか顧客マスターみたいなテーブルを値集合ソースに指定するのが王道です。

そうすれば、マスターに商品を追加したり削除したりすると、自動的にコンボボックスの選択肢も変わってくれます。

「データを保存する場所」と「選択肢がどこから来るか」を意識するだけで、フォーム作りの失敗がかなり減りますよ。

IDで管理しつつ、見た目は分かりやすく!「列数」と「列幅」の設定

データベースを作るときの基本として、社員名や商品名じゃなくて「社員ID」とか「商品ID」みたいな数字で管理するのが良いとされています。

でも、入力画面のコンボボックスに数字のIDだけがズラーッと並んでいても、どれを選べばいいか分かりませんよね。

そこで使うのが、「データとしてはIDを保存するけど、画面には名前だけ表示する」というテクニックです。

これを実現するために調整するのが、プロパティシートの「書式」タブにある「列数」と「列幅」の設定なんです。

やり方はこうです。

まず、値集合ソースになるクエリで「ID」と「名称」の2つのフィールドを用意します。

次に、コンボボックスの「列数」を「2」にして、「列幅」を「0cm;3cm」みたいに設定します。

この「0cm」がポイントです!1列目のIDの幅を0にすることで画面では見えなくなって、2列目の名前だけがユーザーに見えるようになります。

でも、Access内部では「連結列」という設定(普通は1)によって、見えない1列目のIDがちゃんと保存される仕組みになっているんです。

このテクニックを使えば、裏側ではきちんとID管理をしながら、表側では誰でも分かる名前で選べるようになります。

使いやすさとデータの正確さを両立できる、覚えておきたいワザですね。

これぞAccessの本領発揮!2つのコンボボックスを「連動」させよう

Accessでフォームを作るときの楽しいところの一つに、コンボボックス同士の「連動」があります。

たとえば、「都道府県」を選んだ瞬間に、隣の「市区町村」のコンボボックスが、その県の市町村だけに絞り込まれる、みたいな動きです。

これができると、選択肢がたくさんあってもスムーズに入力できるし、間違って選んじゃうこともグッと減ります。

この連動機能は標準のウィザードだけじゃ設定できないので、ちょっと手を加える必要がありますが、仕組みが分かれば意外と簡単ですよ。

設定は大きく2つのステップに分かれます。

まず、子側のコンボボックス(例:市区町村)の「値集合ソース」になっているクエリの抽出条件に、親コンボボックス(例:都道府県)の値を参照するように設定します。

具体的には、クエリデザインの抽出条件欄に `[Forms]![フォーム名]![親コンボボックス名]` って書きます。

でも、これだけだと親を選び直しても子のリストは古いままなんです。

そこで2つ目のステップとして、親コンボボックスの「更新後処理」イベントに、子コンボボックスを再読込させる処理を追加します。

VBAで書くなら `Me!子コンボボックス名.Requery` っていうたった1行のコードを書くだけで、バッチリ連動してくれます。

「抽出条件で参照する」と「イベントで再クエリする」、この2つがセットで初めて連動が動くってことを覚えておいてください。

ユーザーに優しく!間違いを防ぐための設定

コンボボックスを上手に使うには、ただ選べるようにするだけじゃなくて、間違った入力を防ぐための仕組みも用意しておくことが大切です。

実際の仕事では、リストにない値を勝手に入力されたくない場合もあれば、逆にリストにない新しい値をその場で追加したい場合もあります。

こういう動きをコントロールするのが「入力チェック」とか「リスト外入力」に関係するプロパティです。

使う人が迷わず、ストレスなく入力できるフォームを目指して、細かいところまで調整していきましょう。

一番基本的な設定は、「入力チェック」プロパティを「はい」にすることです。

これをやっておくと、コンボボックスのリストにない値を入力しようとしたとき、Accessが自動で警告メッセージを出して、入力を止めてくれます。

データの整合性を保つためにはすごく便利な機能です。

逆に、例外的な入力も許したいときは「いいえ」にしますが、そのときはデータベースがおかしくならないように注意が必要です。

あと、「自動拡張」プロパティを「はい」にしておくと、文字を入力し始めた瞬間に、リストの中から該当する項目を自動で探して表示してくれます。

これでマウスでリストを開いて探す手間が省けて、キーボードだけでサクサク入力できるようになります。

こういう細かい気配りが、長く使ってもらえるシステムを作る秘訣なんですよね。

広告