Accessのコンボボックスでボックス部の表示とリストの表示を異なるものにしたい

2019年11月1日Form

Different box display and list display in Access combo box

このような要望はあまりないと思いますが、リスト部分は記号+項目 表示にして、ボックス部分は項目だけを表示したいとか、リスト部分は階層をインデントで表現して、ボックスはインデントなしで表示させる、ということを実現する方法を紹介します。

元ネタ は下記の質問の回答です。

Microsoft Access 掲示板 イメージコンボボックスでフォントの大きさを変える方法 – zawazawa

リストは記号+項目、ボックスは項目だけ

下記の画像のようにリストの表示とボックス部の表示を異なるようしたい場合の対処法です。

マーク付きコンボボックス

リストのもとになるテーブルを下記のように作成します。

テーブル名 T_List_Mark

IDアイテムマーク
1アイテム1
2アイテム2
3アイテム3
4アイテム4
5アイテム5

コンボボックスのプロパティを下記のように設定します。

プロパティ設定値
値集合ソースSELECT T_List_Mark.ID, T_List_Mark.[アイテム], [マーク] & " " & [アイテム] AS 式1 FROM T_List_Mark;
値集合タイプテーブル/クエリ
連結列1
列数3
列幅0cm;0.002cm

これで、画像のようにリストはマーク付きのアイテム名で、ボックス部はアイテム名のみになります。また、格納される値(Value)は1列目のIDになります。

 原理としては、ボックス部に表示されるのは、表示されている列の一番左の列になります。列幅が1列目は0cmで非表示なので、2列目が表示されます。リストには2列目と3列目が表示されるのですか、2列目は0.002cmなので人間の目には見えずに3列目のみ表示されているように見えます。

リスト部分は階層をインデントで表現

下記の画像のようにしたい場合の設定例です。

インデントコンボボックス

リスト用のテーブルは下記のようにします。

テーブル名 T_List_Indent

IDアイテム階層
1親アイテム10
2子アイテム1_11
3孫アイテム1_1_12
4親アイテム20
5子アイテム2_11

コンボボックスのプロパティを下記のように設定します。

プロパティ設定値
値集合ソースSELECT [T_List_Indent].ID, [T_List_Indent].[アイテム], Space([階層]) & [アイテム] AS 式1 FROM T_List_Indent ORDER BY [T_List_Indent].ID;
値集合タイプテーブル/クエリ
連結列1
列数3
列幅0cm;0.002cm

Space([階層])でインデント用のスペースを生成しています。

後の設定はマーク付きコンボボックスの設定とまったく同じです。

まとめ

コンボボックスの性質をうまく利用して実現しています。このテクニックを覚えておけば、他にもいろいろ応用が利くと思います。