概要
| この記事の結論 Accessのデータ入力用フォームは、フォームのレコードソースに保存先のテーブルを設定し、各フィールドに連結した入力欄を配置して作成します。新規入力だけに使う場合は「データ入力用」と「追加の許可」を「はい」にします。画面の完成後は、正常入力だけでなく、未入力、入力取消、再表示まで確認することが大切です。 データ入力用フォームとは、テーブルに保存するデータを利用者が入力しやすい形で表示するAccessの画面です。 |
この記事でわかること
- 保存先のテーブルを先に設計する
- フォームと入力欄の連結を確認する
- 新規専用と既存編集を分ける
- 保存と取消を実データで確認する
この記事の主な内容
- 入力用フォームと保存先の関係
- 練習用テーブルを準備する
- 連結フォームを作成する手順
- 新規入力専用にする設定と操作性
- 保存と取消を理解して入力ミスを防ぐ
- 入力できないときの切り分けと運用確認
- よくある質問
想定読了時間:約12分~16分
入力用フォームと保存先の関係
入力用フォームは、利用者がデータを入力するための窓口です。入力値の保存先はテーブルであり、画面そのものにデータを蓄積するわけではありません。まず「どのテーブルの、どの項目に保存するか」を決めると、フォーム作成で迷いにくくなります。
レコードソースとコントロールソース
レコードソースは、フォーム全体が扱うデータの出所です。テーブル、保存したクエリ、SQLなどを指定できます。コントロールソースは、個々の入力欄が表示・更新するフィールドや式を指定する設定です。この2段階がつながって初めて、入力内容を保存先へ反映できます。
例えば、フォームのレコードソースを「T_受付」、氏名欄のコントロールソースを「氏名」にすると、その欄からT_受付の氏名を扱えます。見出しラベルに「氏名」と書いただけでは連結されません。入力できるのに再表示すると消える場合は、この違いを確認してください。[1]

最初は単一テーブルのフォームで仕組みを確かめる
初めて作る場合は、集計や複雑な結合を含まないテーブルを元にする方法が分かりやすいでしょう。クエリを保存先に使う場合でも、実際に更新されるのは元のテーブルです。集計クエリなど、結果を表示できても追加・更新できないものがあります。[7]
本記事はWindows版のデスクトップAccessを想定します。既存の業務ファイルで試す場合はコピーを用意してください。以下の名前とデータは練習用の架空例です。既存画面の名前やフィールド名を一括変更する手順ではありません。
練習用テーブルを準備する
フォームの見た目を整える前に、保存先の項目と入力ルールを用意します。ここでは問い合わせの受付を1件ずつ登録する「T_受付」を例にします。主キーは、1件のレコードを他のレコードと区別するための項目です。
| フィールド名 | データ型 | 設定の例 | 目的 |
|---|---|---|---|
| 受付ID | オートナンバー型 | 主キー | 受付1件を識別 |
| 受付日 | 日付/時刻型 | 値要求 はい、既定値 Date() | 受付日を記録 |
| 氏名 | 短いテキスト型 | フィールドサイズ50、値要求 はい、空文字列の許可 いいえ | 受付相手を記録 |
| 件数 | 数値型 | 長整数型、既定値1、値要求 はい、入力規則 >0 | 正の整数を保存 |
| 備考 | 長いテキスト型 | 任意入力 | 補足を記録 |
テーブルデザインで項目と主キーを設定する
[作成]から[テーブルデザイン]を開き、上表のフィールド名とデータ型を入力します。受付IDの行を選び、主キーを設定して「T_受付」という名前で保存します。受付IDは利用者が入力する番号ではなく、自動採番される内部的な識別子として扱います。
フィールドを選ぶと下部にプロパティが表示されます。氏名の必須指定や件数の入力規則を設定し、件数のエラーメッセージには「件数は1以上の整数で入力してください」など、利用者が修正できる説明を入れます。設定後に不正な値を試し、意図どおり拒否されるか確認します。[6]

画面のチェックだけに依存しない
フォームで必須チェックを作っても、テーブルへの直接入力やインポートなど、別の経路からデータが入ることがあります。どの経路でも守るべき型や必須条件はテーブル側にも設定します。一方、入力案内や複数項目の組み合わせに応じたメッセージはフォーム側で補います。
オートナンバーの欠番は、それだけでデータ欠落を意味しません。採番後に登録を取り消した場合など、番号が連続しないことがあります。受付の正式な通し番号が必要な業務では、受付IDとは別の項目と採番ルールを検討してください。
連結フォームを作成する手順
「フォームデザイン」で空の画面を作り、保存先を指定してから入力欄を追加します。各操作の後に設定対象が「フォーム全体」か「テキストボックス」かを確かめると、プロパティの設定間違いを防げます。
| 手順 | 操作 | 確認する結果 |
|---|---|---|
| 1 | [作成]→[フォームデザイン] | 空のフォームが開く |
| 2 | フォーム全体を選択し、F4でプロパティシートを表示 | 選択対象がフォームになる |
| 3 | [データ]の[レコードソース]にT_受付を指定 | フォームがT_受付を参照する |
| 4 | [既存のフィールドを追加]から氏名などを配置 | フィールドに連結した入力欄ができる |
| 5 | フォームをF_受付入力として保存し、フォームビューへ切替 | データを入力・表示できる画面になる |
入力欄ごとの連結先を確かめる
氏名欄のテキストボックスを選択し、コントロールソースが「氏名」になっていることを確認します。件数欄は「件数」、備考欄は「備考」です。欄の名前は「txt氏名」「txt件数」のように、連結先と区別しやすい命名にしておくとコードの読み間違いを減らせます。
受付IDを画面へ配置する場合は、利用者が操作する必要のない表示欄として扱います。[編集ロック]を[はい]、[タブストップ]を[いいえ]にする設計が考えられます。オートナンバー自体の採番はAccessが行うため、利用者に値の入力を求めません。

まず1件を保存してから配置を調整する
練習データとして氏名に「サンプル担当」、件数に「1」を入れ、レコード保存操作を行います。T_受付を開き、入力した値が同じ受付IDのレコードとして存在するか確認してください。入力できることと、目的の場所へ正しく保存されることは別の確認です。
新規入力専用にする設定と操作性
既存レコードを表示せず、新しい受付だけを入力する画面にするには、フォームの[データ入力用]を[はい]にします。ただし、新規追加の可否を決めるのは[追加の許可]です。DataEntryは、追加を許可する機能そのものではありません。[2][3]
| 用途 | データ入力用 | 追加の許可 | 更新の許可 | 削除の許可 |
|---|---|---|---|---|
| 新規受付用 | はい | はい | はい | いいえ |
| 既存の確認と追加・修正 | いいえ | はい | はい | いいえ |
| 参照のみ | いいえ | いいえ | いいえ | いいえ |
上表は設計例です。参照専用でも、元テーブルへの別経路のアクセスまで禁止できるわけではありません。フォームを開くマクロやVBAでデータモードを指定している場合は、その指定も確認してください。保存したプロパティだけを見て判断すると、実際に開いた際の状態を見落とします。

過去データが見えないときに削除と判断しない
データ入力用を[はい]にしたフォームでは、開いたときに既存の保存済みレコードが表示されません。元テーブルを開くか、データ入力用を[いいえ]にした確認画面で存在を確かめます。画面に出ないことを理由に再登録すると、二重登録につながります。
選択入力とキーボード操作を整える
部署や受付区分など選択肢が決まる項目には、コンボボックスを検討します。表示する部署名と保存する部署IDを分ける場合は、コントロールソース、値集合ソース、連結列をそれぞれ確認します。選択肢の設定だけでは、保存先まで自動的に正しく決まるとは限りません。
Tabキーで氏名→件数→備考へ進むようにタブオーダーを調整します。長文の備考欄は高さを確保し、必須項目には文字で説明を添えます。移動ボタンや閉じるボタンを隠す場合は、代わりの移動・取消・終了手段を用意してから切り替えてください。

保存と取消を理解して入力ミスを防ぐ
連結フォームでは、別レコードへの移動や明示的な保存操作などでレコードが保存されます。一般的なフォームでは、閉じる操作も保存につながる場合があります。「保存ボタンを押していないから未登録」とは判断できません。[4]
フォームの設計保存とレコード保存を区別する
画面の部品配置を保存する操作と、入力した業務データを保存する操作は目的が異なります。利用者向けには「入力内容を保存」「未保存の変更を取消」など、処理内容が分かるボタン名にします。連結フォームの自動保存を完全に止める設計は、このボタンを追加するだけでは実現しません。

保存ボタンと取消ボタンのコード例
以下は単票の連結フォームに置く例です。ボタン名をcmd保存、cmd取消とし、それぞれの[クリック時]を[イベント プロシージャ]に設定して、フォームのモジュールに記述します。既存イベントがある場合は上書きせず、既存処理との関係を確認してください。
Private Sub cmd保存_Click()
On Error GoTo ErrHandler
If Me.Dirty Then
Me.Dirty = False
MsgBox “入力内容を保存しました。”, vbInformation
Else
MsgBox “保存する変更はありません。”, vbInformation
End If
Exit Sub
ErrHandler:
MsgBox “保存できませんでした。” & vbCrLf & _
Err.Description, vbExclamation
End Sub
Private Sub cmd取消_Click()
If Me.Dirty Then
If MsgBox(“未保存の変更を取り消しますか。”, _
vbYesNo + vbQuestion) = vbYes Then
Me.Undo
End If
End If
End Sub
Dirtyは現在のレコードに未保存の変更があるかを確認するために使っています。Undoが取り消すのは、現在のレコードの保存前の変更です。すでに保存された値を以前の値へ戻す履歴機能ではありません。親フォームとサブフォームがある場合も、この例だけで両方の変更を一括取消できるとは考えないでください。[5]
保存前の最終チェックを置く
氏名を空白だけで登録させたくない場合は、フォームの[更新前処理]で補足チェックできます。次の例ではフォーム全体のBeforeUpdateを使います。氏名欄の名前がtxt氏名であることが前提です。テーブルの必須条件と併用し、画面以外からの入力も考慮します。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Len(Trim(Nz(Me!txt氏名.Value, “”))) = 0 Then
Cancel = True
MsgBox “氏名を入力してください。”, vbExclamation
Me!txt氏名.SetFocus
End If
End Sub

入力ミスが起きやすいAccessフォームの改善が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
入力できないときの切り分けと運用確認
まず入力できない場所を分けます。「新規行へ進めない」「特定の欄だけ編集できない」「保存時に止まる」では、確認する設定が違います。設定を一度に変えず、コピー上で原因候補を1つずつ確認してください。
| 症状 | 最初に確認する項目 | 対処の方向性 |
|---|---|---|
| 新規登録できない | 追加の許可、元データの更新可否 | 追加を許可し、元テーブルで追加可能か確認 |
| 特定の欄に入力できない | 使用可能、編集ロック、演算式 | 入力欄の目的と制限を確認 |
| 保存後に値が消える | コントロールソース | 非連結なら保存用フィールドへ連結 |
| 保存時にエラー | 型、必須、入力規則、一意制約 | メッセージと対象フィールドを確認 |
| 既存データが見えない | データ入力用、フィルター | 表示条件と保存先を照合 |
| クエリ経由だけ編集不可 | 集計、DISTINCT、結合構造 | 更新可能な保存先へ画面構成を見直す |
公開前に4種類の入力を試す
正常値、必須抜け、規則外の値、入力途中の取消を試します。次にフォームを閉じて開き直し、保存先と表示内容を比較します。保存ボタンを使う経路だけでなく、レコード移動や終了操作を使う経路も確認すると、意図しない登録を発見しやすくなります。

複数人で使う場合は配布とデータ共有も確認する
画面が正しくても、共有方法によって競合や運用負荷が増えます。複数人運用では、画面などを置くフロントエンドとデータを置くバックエンドを分け、各PCに画面を配布する構成を検討します。利用人数だけで判断せず、同じデータを更新する頻度や接続環境も整理してください。
本番への切替時は変更前のフォームを保管し、どのフィールド・イベント・クエリを変更したか記録します。入力画面の改修が帳票や連携処理へ影響する場合は、その出力も確認します。入力専用フォームは、保存先・入力案内・確定操作を一緒に設計することで使いやすくなります。
よくある質問
いいえ。非連結の入力欄には自動保存されるフィールドがありません。また、連結欄でも必須条件や一意制約などに違反すると保存できません。保存先のテーブルを確認してください。
消えません。既存レコードの表示を制御する設定です。別の確認フォームや元テーブルで、保存済みデータを確認できます。
使えます。連結フォームにはレコード移動などによる保存動作があります。ただし、利用者に保存のタイミングを説明し、必要なら明示的なボタンを設けます。
本記事のUndoの例では戻せません。保存済みの訂正は対象レコードを編集するなどの別操作です。変更履歴が必要なら履歴を残す設計を追加します。
データ入力用を[いいえ]とし、更新の許可や入力欄の編集ロックを確認します。元のテーブルやクエリが更新可能であることも必要です。
編集ロック、使用不可、演算欄、フォームの更新禁止、更新不可クエリなどが候補です。フォーム全体か特定欄だけかを分けて確認すると原因を絞れます。
入力ミスが起きやすいAccessフォームの改善が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
参考情報
[1] フォームの作成
https://support.microsoft.com/en-us/access/create-a-form-in-access
[2] DataEntry
https://learn.microsoft.com/en-us/office/vba/api/access.form.dataentry
[3] AllowAdditions
https://learn.microsoft.com/en-us/office/vba/api/access.form.allowadditions
[4] BeforeUpdate
https://learn.microsoft.com/en-us/office/vba/api/access.form.beforeupdate-event
[5] Undo
https://learn.microsoft.com/en-us/office/vba/api/access.form.undo(method)
[6] 入力規則
https://support.microsoft.com/en-us/access/restrict-data-input-by-using-validation-rules
[7] 更新できるクエリの条件
https://support.microsoft.com/en-us/access/edit-data-in-a-query
[10] Dirtyプロパティ
https://learn.microsoft.com/en-us/office/vba/api/access.form.dirty(property)
[11] データベースの分割
https://support.microsoft.com/en-us/access/split-an-access-database