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が自動で警告メッセージを出して、入力を止めてくれます。
データの整合性を保つためにはすごく便利な機能です。
逆に、例外的な入力も許したいときは「いいえ」にしますが、そのときはデータベースがおかしくならないように注意が必要です。
あと、「自動拡張」プロパティを「はい」にしておくと、文字を入力し始めた瞬間に、リストの中から該当する項目を自動で探して表示してくれます。
これでマウスでリストを開いて探す手間が省けて、キーボードだけでサクサク入力できるようになります。
こういう細かい気配りが、長く使ってもらえるシステムを作る秘訣なんですよね。
広告
