Accessコンボボックスでリスト以外の値を入力する方法

概要

この記事の結論
Accessのコンボボックスでリスト以外の値を入力するには、[入力チェック]を[いいえ]にします。ただし、名前を表示して別列のIDを保存する構成では、そのまま自由入力にはできません。候補にない文字を保存することと、候補一覧へ新しい項目を追加することも別の処理です。自由記述かマスター選択かを先に決め、保存先のデータ型と制約を確認しましょう。
入力チェックは、コンボボックスで候補に含まれる値だけを受け付けるかを指定する設定です。

この記事でわかること

  • 入力チェックでリスト制限を変更
  • 候補への追加は別処理
  • 表示名と保存IDを区別
  • データ型と参照整合性を確認

この記事の主な内容

  1. 自由入力と候補追加の違いを理解する
  2. 文字列を保存する練習用コンボボックスを作る
  3. 入力チェックをいいえに変更する
  4. IDを保存するコンボボックスの制約を知る
  5. 候補そのものを追加する方法を選ぶ
  6. 入力できないときは保存先を確認する
  7. 表記揺れを防ぐ運用と動作確認
  8. よくある質問

想定読了時間:約13分~17分


自由入力と候補追加の違いを理解する

コンボボックスは候補を選べる入力部品です。[入力チェック]を[いいえ]にすると、条件が合う構成では一覧にない値も入力できます。ただし、入力した値が候補一覧へ自動登録されるわけではありません。「今回のレコードに保存する」と「次回も選べる候補を増やす」は分けて設計します。[S1]

例えば、配送方法の候補が「宅配便」「店頭受取」のとき、「自社便」と入力して受注レコードへ保存するのが自由入力です。一方、以後の受注でも「自社便」を選べるようにするには、値集合ソースや候補元のマスターテーブルを更新する必要があります。

やりたいこと主に変更するもの使いどころ
一覧外の文字を今回だけ入力入力チェックと保存先の条件備考に近い自由記述
固定候補を設計者が増やす値リストの設定変更頻度が少ない選択肢
利用者が共有候補を追加マスターテーブルと登録画面部署・商品・取引先など
候補のIDだけを保存連結列と参照整合性集計や他テーブルとの結合
自由入力と候補追加の違いについて、自由入力:レコードへ保存、候補追加:一覧の元を更新を示した図

最初に自由入力を許してよい項目か決める

自由入力は便利ですが、「自社便」「社内便」のような表記揺れが生まれます。後で種類別に集計する項目なら、候補を管理した方が扱いやすい場合があります。設定を変える前に、その値を検索、集計、請求、外部連携で使うかを確認しましょう。


文字列を保存する練習用コンボボックスを作る

基本動作は、文字列を保存する1列のコンボボックスで試すと理解しやすくなります。新しいACCDBか業務ファイルのコピーに、次の練習用テーブルT_受付を作成します。ここに実際の顧客情報を入れる必要はありません。

フィールド名データ型設定例
受付IDオートナンバー型主キー
配送方法短いテキスト型フィールドサイズ50

T_受付をレコードソースにするフォームF_受付を作り、コンボボックスを配置します。設定を手入力する場合はコントロールウィザードを使わず、配置した部品のプロパティを次の値にします。

プロパティ設定例意味
名前cbo配送方法画面部品の識別名
コントロールソース配送方法保存先フィールド
値集合タイプ値リスト候補を直接列挙
値集合ソース宅配便;店頭受取候補の文字列
列数1候補を1列で扱う
連結列11列目を値として使う
入力チェックはい最初は一覧内に限定

この例の「値リスト」は値集合タイプの一種です。テーブルやクエリから候補を取得するコンボボックスもあります。画面にドロップダウンがあるからといって、すべてが値集合タイプの「値リスト」ではない点に注意してください。

設定する3つの保存条件について、保存先は文字列、候補は1列、連結列は1を示した図

入力チェックをいいえに変更する

フォームをデザインビューで開き、cbo配送方法を選択します。F4でプロパティシートを開き、[データ]タブの[入力チェック]を[いいえ]へ変更してください。このプロパティはVBAではLimitToListと呼ばれます。[S1]

1. 変更前のフォームを保存しておきます。

2. cbo配送方法の[入力チェック]を[いいえ]にします。

3. フォームビューへ切り替え、新しいレコードを入力します。

4. 候補にない「自社便」を入力し、別のレコードへ移動して保存します。

5. T_受付を開き、配送方法に「自社便」が保存されたことを確認します。

6. コンボボックスの候補を開き、候補一覧が自動で増えていないことも確認します。

自由入力の4ステップについて、コンボを選択、データを開く、入力チェックを変更、保存先を確認を示した図

保存できたかは元テーブルで確認する

画面に文字が見えているだけでは、保存が完了したとは限りません。フォームが非連結なら自動保存されませんし、レコードの他の必須項目が未入力なら保存時にエラーになることがあります。移動後に対象レコードへ戻り、保存値を確かめてください。 入力チェックを[いいえ]にしても、保存先のデータ型、文字数、入力規則、一意制約などは残ります。例えば50文字の短いテキストへ長い説明文を入れる用途なら、コンボボックスの制限だけでなく項目設計を見直す必要があります。


IDを保存するコンボボックスの制約を知る

業務用の画面では、利用者に部署名を見せ、実際には部署IDを保存する構成がよく使われます。この場合、表示文字と保存値は同じではありません。新しい部署名を入力しても、それに対応するIDは自動的に用意されません。

設定項目IDを保存する構成例
候補元T_部署の部署IDと部署名
列数2
連結列1(部署ID)
列幅0cm;4cm(IDを隠して部署名を表示)
保存先受付テーブルの部署ID

Microsoftの仕様では、連結列が最初に表示される列と異なる場合、または連結列が0の場合、LimitToListは[はい]になります。上の例で自由入力ができないのは、単に設定変更が失敗したのではなく、表示と保存値の構成に理由があります。[S2]

表示名と保存IDを区別について、表示:営業部、保存:10、別列の値を利用を示した図

参照整合性を外して解決しない

部署IDが部署マスターを参照し、参照整合性が有効なら、存在しないIDの登録は制約で拒否されます。入力チェックを変えても、この制約が解除されるわけではありません。登録エラーを避けるためだけに参照整合性を外すと、所属先のないデータが生まれるおそれがあります。

このような項目では、部署をマスターへ登録してIDを発行し、そのIDを選べるようにする方法が適しています。自由記述が必要なら、「部署ID」と「補足説明」を分けることも検討してください。

コンボボックスの自由入力の影響範囲が分からない場合

設定だけで解決できない場合や、既存のフォーム・クエリ・外部連携への影響を判断できない場合は、Accessの教科書へご相談ください。対象の画面、起きている症状、変更したい内容を整理すると、調査や改修の範囲を検討しやすくなります。


候補そのものを追加する方法を選ぶ

少数の固定候補なら、設計者が値集合ソースを編集する方法で十分な場合があります。複数の利用者が候補を共有したり、追加履歴や有効・無効を管理したりするなら、候補をマスターテーブルへ保存する方法が向いています。

値リストへ一時的に追加する例

1列の値リストであればAddItemを使用できます。次のコードはフォームモジュール内から実行する基本例で、値集合タイプが[値リスト]であることを前提とします。[S4]

Me!cbo配送方法.AddItem “自社便”

これは候補表示の変更例であり、共有マスターへレコードを追加する処理ではありません。また、毎回実行すれば同じ項目が重複する可能性があります。フォームを閉じた後や別PCでも候補が維持されることを期待するなら、実行時の値リスト変更だけに依存せず、保存先を明確に設計してください。

マスターへ追加するときの順序

1. 入力された候補の名前と既存候補を確認します。

2. 追加権限がある利用者に、必要な項目を入力してもらいます。

3. マスターテーブルへ保存し、IDを確定します。

4. コンボボックスをRequeryで再読み込みします。 5. 新しい候補のIDを選択し、業務レコードを保存します。

候補追加の進め方について、登録内容を確認、マスターへ保存、候補を再読込、IDを選択を示した図

リスト外入力時のイベントを使う場合

NotInList(リスト外入力時)は、LimitToListが[はい]のとき、候補にない値を入力して別の部品へ移動するなどのタイミングで発生します。入力チェックを[いいえ]にしたまま、このイベントで追加を行う設計にはできません。[S3]

マスターへの保存が成功した後にResponse = acDataErrAddedを返すと、Accessは候補を再照会し入力値を確認します。この応答値を代入するだけでマスターが作られるわけではありません。登録取消、重複、必須項目不足、同時登録の失敗も処理する必要があります。

部署などの候補には、名称以外に部署コードや有効期間が必要な場合があります。そのため、初心者向けには「新規登録」ボタンから専用のマスター画面を開き、登録後に候補を再読込する構成も分かりやすい選択肢です。


入力できないときは保存先を確認する

入力チェック以外にも、コンボボックスやテーブルの条件が入力を制限します。まず入力中に拒否されるのか、レコードを保存する時点で拒否されるのかを分けると、調べる対象を絞れます。

症状確認すること対応
いいえにできない連結列と最初の表示列ID選択ならマスター追加を検討
文字を入れると型エラー保存先のデータ型数値IDの欄へ名称を入れない
保存時に拒否される値要求・入力規則・文字数フィールド条件を確認
存在しないIDを保存できない参照整合性先に参照先を登録
入力後に値が消える非連結・保存失敗コントロールソースと他の必須欄を確認
勝手に既存候補になる自動拡張による補完補完された部分と確定値を確認
入力エラーの確認箇所について、連結列、データ型、入力規則、参照整合性を示した図

自動拡張は、入力した先頭文字から既存候補を補完する機能です。入力チェックとは役割が違います。自由入力の試験では、既存候補の先頭と重なる短い名前も試し、意図した文字列で保存されるかを確認しておきましょう。


表記揺れを防ぐ運用と動作確認

自由入力を許可する場合は、集計や検索にどの程度使うかを先に決めます。表記揺れを後から毎回補正するより、共有候補へ登録する人や登録ルールを決める方が運用しやすい場合があります。

試験する入力確認する結果
既存の候補従来どおり保存できる
候補外の文字設計した欄だけ自由入力できる
空欄必須・任意の方針どおりになる
長い文字列保存先の上限に対する案内が出る
既存候補に似た表記重複や表記揺れの扱いが明確
フォームの再起動保存値と候補一覧を別々に確認
別PC・別利用者共有候補が必要な範囲へ反映される
自由入力を許す前の確認について、集計に使うか、表記をそろえるか、共有候補か、追加権限は誰かを示した図

よくある質問

必ずではありません。表示する列と保存する連結列が異なる構成では、入力チェックが「はい」になる制約があります。また、保存先が数値型、必須項目、入力規則付きなどの場合は、その条件も満たす必要があります。まず文字列を保存する1列のコンボボックスで基本動作を確認し、業務用の欄では値集合ソース、連結列、列幅、保存先の型を調べてください。設定値だけを変えてエラーを回避するのではなく、何を保存する欄なのかを確認することが大切です。

自由入力でレコードへ保存しただけでは、候補一覧が自動で増えるとは限りません。固定の値リストなら値集合ソースを更新し、共有候補ならマスターテーブルへ登録してコンボボックスを再読み込みします。AddItemは値リストの表示項目を追加できますが、共有マスターへ保存する処理ではありません。フォームを閉じた後や別PCで使うことまで考えるなら、候補の保存先を明確にしてください。追加権限、重複確認、名称変更のルールも決めておくと管理しやすくなります。

表示名と保存IDが別の列なら、そのまま文字列を自由入力させる構成には向きません。例えばID列を非表示にして部署名だけを見せている場合、利用者が新しい部署名を入力しても対応するIDは存在しません。先に部署マスターへ登録し、候補を再読み込みして新しいIDを選ぶ方法が基本です。参照整合性が有効なら存在しないIDは拒否されます。制約を外して通すのではなく、マスター追加の手順か、別の自由記述欄を用意する設計を検討してください。

NotInListイベントは、入力チェックが「はい」のときに候補外の値を入力し、別の部品へ移動するなどした場合に発生します。「いいえ」へ変更すると、候補外の値が許可されるため、このイベントを前提にした追加処理は動きません。また、自動拡張で既存の候補に補完されていると、リスト外と判定されないことがあります。イベントの設定、入力チェック、補完後の値を順に確認してください。追加成功の応答を返す前には、候補元への保存を完了させる必要があります。

コンボボックスが文字を受け付けることと、テーブルがレコードを保存できることは別だからです。保存先のデータ型、フィールドサイズ、値要求、入力規則、一意制約、参照整合性を確認します。別の必須項目が空欄でも保存できない場合があります。エラーメッセージを控え、候補外入力だけで発生するのか、既存候補でも発生するのかを比較してください。入力チェックを変更してもテーブルの制約は残るため、保存先の条件に合うデータ設計へ整える必要があります。

その値を分類、集計、結合、請求などの判断に使うなら、マスター管理を優先して検討します。同じ意味の値を複数の表記で登録すると、集計が分かれたり連携先で認識されなかったりするためです。一方、例外的な説明や補足は自由記述に向いています。例えば配送方法は候補から選び、特殊な事情は備考へ入力する形なら両方を満たせます。利用者が頻繁に候補を増やす業務では、自由入力を解禁する前に、登録者と承認・重複確認のルールを決めましょう。

関連記事

フォームの作成方法

テキストボックスと連結の違い

リストボックスの表示と保存値

テーブルの入力規則

コンボボックスの自由入力の影響範囲が分からない場合

設定だけで解決できない場合や、既存のフォーム・クエリ・外部連携への影響を判断できない場合は、Accessの教科書へご相談ください。対象の画面、起きている症状、変更したい内容を整理すると、調査や改修の範囲を検討しやすくなります。


参考情報

[S1] Microsoft LimitToList
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.limittolist

[S2] Microsoft BoundColumn
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.boundcolumn

[S3] Microsoft NotInListイベント
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.notinlist

[S4] Microsoft AddItemメソッド
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.additem

TOP