Accessで使いやすいフォームを作る上で、絶対に避けて通れないコントロールが「コンボボックス」です。
コンボボックスには、データ入力にとって重要な「効率化」と「正確性」を実現する2つの役割があります。
また、その他の場面においても、かなり役にたつコントロールです。
今回は、コンボボックスの基本設定から、実務に役立つ「自動ドロップダウン」や「複数のコンボボックスの連動絞り込み」まで、コンボボックスを使い倒すためのテクニックを解説します。
コンボボックスの基本
概要
コンボボックスは、フォームに配置するコントロールの一つで、以下のようなプルダウン式の選択肢のことです。選ぶだけで入力できるので、直接手入力が不要です。

コンボボックスのメリット
コンボボックスは、特に入力作業においてそのメリットを発揮します。
【正確性】入力内容の制御
コンボボックスには「入力チェック」というプロパティがあり、このプロパティの値を はい にすることで、選択肢以外は入力不可とすることができます。グループ化や集計などを行う場合、一定の入力内容を制御したい場合に有効です。具体的な設定方法は後半で解説します。

複数人がデータ入力する場合でも、値のバラつきがないのは重要です。
【効率性】入力作業の負担軽減
手入力を行う必要がありませんので、その分作業負荷が軽減されます。
【省スペース】リストボックスとの比較
上記の「正確性」「効率性」のメリットは、リストボックスにも備わっています。しかし、リストボックスには無いコンボボックスのメリットがあります。それが省スペースです。

リストボックスは、選択肢の数だけボックスがタテに長くなります。
対して、コンボボックスは、プルダウンした状態ではリストボックスと同じ大きさですが、通常時はテキストボックスと同じ大きさですから、フォームのスペースに占める割合は各段に少なくて済みます。
4つの重要なプロパティ
コンボボックスをフォームに配置する際は、いくつかのプロパティを設定する必要があります。
ここでは、その中でも特に重要な 4つのプロパティ について説明します。
説明にあたり、以下のフォームに配置したコンボボックスを例に説明します。

① 列数 (ColumnCount)
値集合ソースから「何列分のデータを取得するか」を指定します。
例では、「組織コード」と「組織名」を2列で表示したいため「2」 と設定します。
② 列幅(ColumnWidths)
プルダウンリストに表示される各列の幅を設定します。
例では「組織コード」は狭く、「組織名」は広く表示したいため、1cm;3cm のように、列ごとに幅を指定します。
また、「組織コード」自体は選択するための情報として表示不要である場合は、0cm;3cm のように設定します。この場合、組織コード列は表示されませんが、データとしては保持されるため、後述「連結列」の指定を行うこともできます。
③ 値集合タイプ (RowType)
「コンボボックスのリストに表示するデータ元」を決める、重要な設定項目です。
データ元を決めた後は、値集合ソース欄に、実際のデータを指定します。値集合タイプには、次の3種類を設定することができます。
テーブル/クエリ (Table/Query)
コンボボックスの選択肢として、既存のテーブルやクエリの値を参照します。また、SQL文を直接指定することもできます。
このタイプを選択するメリットは、指定したテーブルとコンボボックスが常に連動しているため、データ追加時でも特段メンテナンスが不要ということです。
例では、値集合ソース欄に M_組織マスタ というテーブルを指定しています。
値リスト (Value List)
テーブルやクエリを参照せず、直接手入力した文字を選択肢として表示します。
例と同じ選択肢を値リストで実現するには、プロパティの値集合ソース欄に「1;総務部;2;人事部~」のように直接入力します。
ソース用のオブジェクトが不要というメリットがある反面、テーブル/クエリと異なり、選択肢に変更が生じる場合はプロパティを直接メンテナンスする必要があります。
選択肢が少ない場合や、新しい選択肢が発生する見込みがない場合等に限り使用することをお勧めします。
フィールドリスト (Field List)
指定したテーブルやクエリの「フィールド名(列名)」自体を選択肢として表示します。
通常はあまり使用されませんが、検索フォームでの並び替えなど、フィールド指定が必要な場合に、想定されます。
④ 連結列 (BoundColumn)
「リストから選択した際、実際にテーブルへ保存される値が何列目か」を指定します。
例では、所属コード欄に値を反映させたいため、値集合ソースの1列目である組織コードを反映させる必要があります。この場合はプロパティには 「1」 を設定します。
操作性を向上させる「小技」設定
クリックの手間を減らす「自動ドロップダウン」
コンボボックスに入力しようとする時、わざわざ右側の「▼」ボタンをクリックするのは面倒です。 キーボード操作(Tabキー等)で、コンボボックスにフォーカスが当たった瞬間、自動でリストが開くように設定すると効率的です。
【設定方法】
コンボボックスの「イベント」タブ → 「フォーカス取得時 (OnGotFocus)」 に以下のVBAを記述します。
Private Sub コンボ1_GotFocus()
' フォーカスが当たったらリストを自動で開く
Me.コンボ1.Dropdown
End Sub
たった1行ですが、使い勝手がかなり向上します。
「リスト以外は認めない」設定
前述「【正確性】入力内容の制御」で触れた、入力ミスを防ぐための設定です。
プロパティ 「入力チェック(LimitToList)」 を「はい」に設定すると、コンボボックスの選択肢に存在する値のみを入力・反映できるようになります。
Accessでは、さまざまなキーワードを基に検索や絞り込み、グループ化による集計を行います。
これらの処理を正しく行うためには、キーワードに表記のばらつきがないことが前提となります。
人の手入力にはどうしても誤入力がつきものですが、コンボボックスに入力チェックの制約を設けることで、常に正確な値をデータとして保存できます。
ただし、値集合ソースとなるテーブルに、まだ十分な選択肢が登録されていない場合など、
意図的に手入力を許可したいケースもあります。
この設定については、運用状況に応じて使い分けるようにしましょう。

なお、VBAを使用すれば、手入力された値を次回以降の選択肢として自動的に登録する、といった仕組みを作ることも可能です。
複数のコンボボックスを連動させる「絞り込み」
コンボボックスの応用的な使用方法例をご紹介します。
今回は登録画面の住所欄等で見かける、「都道府県を選んだら、次のコンボボックスの選択肢をその県の市町村だけにしたい」という複数コンボボックスによる絞り込みです。
具体的には以下フォームのようなものです。

北海道を選ぶと、次のコンボボックスには、北海道内の市区町村が選択肢とセットされます。
さっそく手順をみていきましょう。
手順① 親コンボと子コンボ用のクエリを作成する
親コンボボックス(都道府県用)と、子コンボボックス(市区町村用)の値集合用ソースに指定するためのクエリをそれぞれ作成します。
今回は以下の2つを作成
- 親コンボボックス(都道府県用)…
SQ_都道府県(都道府県名データを保持するフィールドが1つ) - 子コンボボックス(市区町村用)…
SQ_市区町村
手順② 子コンボ用のクエリ設定
クエリSQ_市区町村のデザインビューを開き、クエリの設定を行います。

【解説】
クエリのフィールドは2つです。
- 市区町村…子コンボボックス(
コンボ3)の選択肢として表示するフィールド。 - 都道府県…抽出条件に「
[Forms]![F_都道府県]![コンボ1]」を設定することで、都道府県を選択する親コンボボックス(コンボ1)と合致する都道府県分を抽出する。

これで、「親コンボで選ばれている値」と同じデータしか表示されなくなります。
手順③ 親コンボ(都道府県)のイベント設定
手順②で、親コンボで選択した都道府県に基づき、子コンボに市区町村が表示されるようにしましたが、これだけでは動きません。親コンボを選び直したタイミングで、子コンボの情報を更新する必要があります。
親コンボボックスの「更新後処理 (AfterUpdate)」イベントにVBAを記述します。
Private Sub cmbPrefecture_AfterUpdate()
' 親が変わったら、子の中身を空にする(矛盾を防ぐため)
Me.コンボ3 = Null
' 子コンボのリストを再取得(更新)する
Me.コンボ3.Requery
End Sub
Requeryをすることで、手順①で設定した抽出条件が再度実行され、選ばれた都道府県だけのリストになります。
まとめ
今回は、Accessのフォーム作成において使用頻度が高い「コンボボックス」について、基本から応用まで深掘りしました。
記事中でも説明したとおり、コンボボックスは「正確性」と「効率性」を追求するうえで、とても重要ですので、ぜひフォーム画面設計を行う際は、積極的に取り入れてみてください。
また、説明では「プロパティが多くてややこしい」と感じるかもしれませんが、まずは「値集合タイプを使い分ける」ところや、「列幅を 0cm にする」といった小さなテクニックから取り入れてみてください。

・Accessで業務用ツールを作ってみたいけど、なかなか時間がとれない。
・先輩が作った既存のツールを改修したいけど難しい…。
そのような場合には、私がみなさまの代わってカタチにいたします。ぜひ作成サービス
をご利用ください。


