概要
| この記事の結論 Accessで入力ルールを徹底するには、フォームだけでなく保存先のテーブルにも制約を設定します。フォームは選択肢やメッセージで入力を助け、テーブルは必須、値の範囲、重複、参照関係を守ります。CSV取込など別の経路も含めて検査すれば、担当者や入力方法が変わってもデータ品質を保ちやすくなります。Excelでの改善方法と比較しながら、具体的な設定例を紹介します。 |
この記事でわかること
- Excelの入力規則とAccessの役割を整理する
- テーブル側で必須と値の範囲を決める
- フォームで選びやすく直しやすくする
- 複数項目の整合性を保存前に確認する
- 直接入力と取込でも規則を守る
この記事の主な内容
- Excelの入力規則とAccessの役割を整理する
- テーブル側で必須と値の範囲を決める
- フォームで選びやすく直しやすくする
- 複数項目の整合性を保存前に確認する
- 直接入力と取込でも規則を守る
- 規則の変更と既存データを検証する
- 入力品質を測りながら運用する
- よくある質問
想定読了時間:約15分~20分
Excelの入力規則とAccessの役割を整理する
Excelの入力規則は、選択肢や数値の範囲を設定するのに便利です。候補一覧のテーブル化、入力する範囲の統一、シート保護などで改善できる運用もあります。ただし、新しい行への設定漏れ、貼り付けや複製での違い、複数ファイルのルール変更漏れがないかを確認する必要があります。
Accessでは、入力用のフォームとデータを保存するテーブルを分けます。同じフォームを使えば行ごとに部品を設定し直す必要はありません。一方、フォームを通らない入力があれば、フォーム独自の検査は働かないため、保存側にもルールを置くことが重要です。[参考1][参考2]
| 層 | 役割 | 設定の例 |
|---|---|---|
| フォーム | 入力者が迷わず正しい値を入れる | コンボ、説明、保存前の案内 |
| テーブルや保存先DB | 保存してよいデータを制限する | 必須、入力規則、主キー、参照整合性 |
| 取込処理 | 外部データの違反を検出する | 一時表、エラー一覧、取込件数照合 |
例えば数量の誤りを防ぎたいなら、フォームへ「1以上」と表示するだけでは不十分です。テーブルで正の値を要求し、未入力も拒否する設定を組み合わせます。画面の分かりやすさと、保存時に守る条件を分けると、どこに設定すべきか判断しやすくなります。

テーブル側で必須と値の範囲を決める
最初に、項目ごとに保存してよい値を定義します。この記事では架空のT_作業を例に、作業名、数量、開始日、終了日、状態、担当IDを管理します。Accessの通常のACCDB内に作るテーブルを想定し、既存データベースはコピーしてから検証します。
| 項目 | 型と設定 | ルール |
|---|---|---|
| 作業ID | オートナンバー・主キー | 作業を一意に識別 |
| 作業名 | 短いテキスト・50文字 | 値要求はい・空文字列の許可いいえ |
| 数量 | 数値・長整数 | 値要求はい・入力規則 >0 |
| 開始日 | 日付/時刻 | 終了日との前後関係を検査 |
| 終了日 | 日付/時刻 | 未完了ならNullを許す |
| 状態 | 短いテキスト | 値要求はい・選択肢を制限 |
| 担当ID | 数値・長整数 | 担当マスターへ参照整合性 |
テーブルのデザインビューで数量を選び、フィールドプロパティの[値要求]を「はい」、[入力規則]を「>0」、[エラーメッセージ]を「数量は1以上の整数を入力してください」にします。小数が必要な業務では長整数を使わず、必要な精度と上限に合う型・規則を別途決めます。
入力規則だけでNullを必ず拒否できると考えず、必須は値要求で明示します。また文字列のNullと空文字列は異なります。作業名では両方を許さない設定を行い、さらに半角・全角の空白だけの名前を認めるかも決めます。空白を除いた検査を追加する場合は、フォームと取込処理で同じ仕様にしてください。
状態のような固定候補なら、テーブルの入力規則を「In (“未着手”,”進行中”,”完了”)」とする例があります。候補が頻繁に変わる場合は、IDを持つ状態マスターと参照整合性で管理する方法も検討します。画面の値リストを変えたのにテーブルの規則が古い、という不一致を残さないことが重要です。

フォームで選びやすく直しやすくする
フォームには、入力内容に合った部品を使います。担当者はコンボボックス、二者択一はチェックボックス、少数の固定候補はオプショングループなどを検討します。部品を変える目的は、クリックを減らすだけでなく、選んだ値の意味と保存先を明確にすることです。
コンボボックスの[入力チェック]を「はい」にすると一覧外の値を制限できますが、Nullの禁止は保存先の値要求で別に設定します。[参考4]
担当者名を表示し、担当IDを保存する構成なら、同姓同名や改姓にも対応しやすくなります。表示する名称と保存する値の違いを設定表へ残しましょう。
入力者が直す場所を分かるようにする
1. 必須項目に「必須」と明示し、色だけに頼らず見分けられるようにします。
2. 数量の欄には単位と入力例を付け、整数か小数かも伝えます。
3. Tabキーで自然な順序に移れるよう、タブオーダーを設定します。
4. エラーメッセージは「入力が不正」ではなく、直す項目と条件を示します。
5. 保存できなかったときは入力内容を残し、修正して再保存できるようにします。
定型入力は、電話番号や郵便番号などの入力形式を補助する機能です。実在する電話番号や住所かを保証するものではありません。また書式設定は主に見た目を整えるもので、保存可能な値の範囲を制限する設定とは別です。見た目が正しいだけで検証完了としないでください。

複数項目の整合性を保存前に確認する
「終了日は開始日以降」といった複数項目の関係は、テーブルのレコード入力規則やフォームの更新前処理で確認します。フィールド単体の入力規則は他フィールドを参照できないため、設定する場所を間違えないようにします。
[参考2]
例えば「終了日は未入力でもよい。入力した場合は開始日が必要で、開始日以降でなければならない」という規則を、テーブル全体のプロパティに設定します。デザインビューでF4を押し、数量など特定フィールドではなくテーブル全体の入力規則を選んでください。
[終了日] Is Null Or
([開始日] Is Not Null And [終了日] >= [開始日])
同じテーブルの入力規則に、さらに「完了なら終了日必須」を組み合わせる場合は、先ほどの式を括弧で囲み、次の条件とANDでつなぎます。状態の必須設定と候補制限は別途有効にしておきます。
([終了日] Is Null Or
([開始日] Is Not Null And [終了日] >= [開始日]))
And ([状態] <> “完了” Or [終了日] Is Not Null)
フォームでは、保存前に分かりやすい案内を出せます。F_作業の状態コンボをcbo状態、終了日の連結テキストボックスをtxt終了日とし、フォーム全体の[更新前処理]に以下を設定します。値が正しくなるまで保存を取り消す例で、入力内容を勝手に消す処理は入れません。[参考3]
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(Me!cbo状態, “”) = “完了” _
And IsNull(Me!txt終了日) Then
Cancel = True
MsgBox “完了にするには終了日を入力してください。”, vbExclamation
Me!txt終了日.SetFocus
End If
End Sub
このイベントはフォームを経由した保存に対する処理です。更新クエリや別の取込処理まで同じイベントが実行されるわけではありません。必ず守るべき条件は保存先にも設定し、フォーム側は案内の補助として位置付けます。エラー時に無条件でUndoすると入力を失うため、取消しの意味を利用者へ明示する場合だけ使います。

Accessの教科書で入力規則業務の改善を相談する
候補や集計条件が部署ごとに異なる、既存の画面を直せる担当者がいないなど、入力規則の手順だけでは解決しない場合は、現在のExcelと業務の流れを整理して相談すると検討が進みます。Accessの教科書のお問い合わせで、対象データ、利用人数、困っている操作をお知らせください。
直接入力と取込でも規則を守る
入力経路を一覧にすると、フォームだけで防げない問題が見つかります。テーブルの直接編集、追加クエリ、更新クエリ、ExcelやCSVの取込、外部システムからの書き込みについて、それぞれどの規則が働くか確認します。リンク先がSQL Serverなどの場合は、必須や一意性等を保存先でも設定する必要があります。
外部ファイルは、まず一時取込テーブルへ入れます。そこから未入力、値の範囲外、担当ID不一致、重複キーを抽出し、エラーのない行だけを本番へ追加します。失敗行を黙って捨てず、元ファイルの行と理由が分かる一覧を作ると、入力元へ修正を依頼しやすくなります。
| 入力経路 | 守る場所 | 確認すること |
|---|---|---|
| 入力フォーム | フォームとテーブル | 正しい値だけ保存できるか |
| テーブル直接編集 | テーブル | フォームと同じ必須条件か |
| CSV取込 | 一時表と検査と本番制約 | 未取込行の理由が追えるか |
| 更新クエリ | 更新条件と保存先制約 | ルール違反で拒否されるか |
| 外部DBへの書き込み | 外部DBの制約と権限 | Accessを通らなくても守られるか |
重複禁止は、保存直前の件数チェックだけに頼りません。二人が同時に確認して「まだ存在しない」と判断し、その後両方が保存する競合が起きるためです。業務上の識別番号や必要な項目の組合せには、一意インデックスなど保存側で重複を拒否する仕組みを設けます。
ナビゲーションウィンドウを隠すことや、配布用のACCDEにすることは、操作ミスや設計変更を抑える工夫です。ファイルやデータへのアクセスを完全に制限する機能とは異なります。誰が元データへ接続できるかという権限も別に確認してください。

規則の変更と既存データを検証する
規則を厳しくすると、今まで保存できた値が許されなくなる場合があります。例えば数量0を禁止する前に、既存の0が入力ミスなのか、未確定や取消を表す値として使われていたのかを調べます。意味を確認せず一律に1へ置き換えると、実績を誤って増やしてしまいます。
変更前に、違反する既存レコードを選択クエリで抽出し、修正方法を決めます。Nullを含める条件は「[数量] Is Null Or [数量]<=0」のように明示します。Accessから既存データの検証を求められた場合も、そのまま進めず、違反がないことと実際の入力経路での動作を確かめます。
| 試験 | 期待する動作 |
|---|---|
| 数量が1 | 保存できる |
| 数量が0や負数 | 保存できず条件が表示される |
| 数量が未入力 | 必須違反として保存できない |
| 終了日だけ入力 | 開始日不足として保存できない |
| 状態が完了で終了日なし | 終了日の入力を案内する |
| 既存キーと同じ識別番号 | 重複を拒否する |
| CSVに同じ違反データ | 本番へ入らず理由を確認できる |
小数を整数型の項目へ入力した場合は、環境や入力経路で変換される動作にも注意します。「小数を入れたら必ずエラーになる」とは決めつけず、端数を禁止する要件なら変換前の入力や一時取込表で明示的に検査します。最大値や桁数超過、全角空白なども業務のデータに合わせて試験へ加えます。
規則の変更は、フォーム、テーブル、取込処理、手順書を一組で更新します。旧版のフォームが残ると新しい保存ルールとの不一致でエラーが増えるため、配布版の管理と適用日を決めます。更新前のバックアップも残し、問題があれば戻す範囲を判断できるようにします。

入力品質を測りながら運用する
入力エラーをすべてゼロにすることより、誤った値が保存されず、利用者が自力で直せることを重視します。導入直後は、保存時のエラー件数、差し戻し件数、取込の失敗行数を記録します。同じ項目で繰り返し失敗するなら、規則を緩める前に説明や部品の配置を見直しましょう。
例外を認める場合は、通常入力と混ぜず、管理者が理由付きで処理する流れにします。例えば数量が未確定の作業を登録する必要があるなら、数量0で代用するのではなく、下書き状態や確定処理の設計を検討します。例外のために必須条件を全体から外すと、通常業務まで不正な値を保存できるようになります。
担当者の引継ぎ用には、項目名、保存型、必須条件、許容範囲、例外、エラーメッセージ、適用される入力経路を一覧で残します。誰か一人だけがVBAを理解している状態を避け、変更の影響先を調べられるようにします。件数が増えた場合やWeb入力が必要になった場合も、この定義が次の仕組みへ移す基準になります。

よくある質問
フォーム経由の操作だけなら一定の効果がありますが、テーブル直接編集やCSV取込、更新クエリなどではフォームの検査を通らない場合があります。必ず守る条件はテーブルや保存先DBにも置き、フォームでは分かりやすい案内を補います。例えば数量はテーブル側で必須かつ正の値にし、画面には単位と入力例を表示します。どこからデータが入るかを一覧にして、各経路で同じ違反データが拒否されることを確かめると、設定漏れを見つけやすくなります。
値の範囲を制限する規則と、未入力を禁止する設定が別だからです。数量を正の値にしたい場合は、入力規則の「>0」と、値要求の「はい」を組み合わせます。文字列ではNullと空文字列も区別し、必要に応じて空文字列の許可を「いいえ」にします。ただし空白文字だけの入力はさらに別の問題です。半角や全角の空白をどう扱うかを決め、入力フォームと取込処理で同じ検査を行います。正常値、空欄、空白のみを分けて試験してください。
できます。同じレコードの複数項目を比較する場合は、テーブルのレコード入力規則を使います。終了日を任意にするなら、終了日がNull、または開始日が入力されていて終了日が開始日以降、という条件にします。フォームの更新前処理にも案内を加えると、利用者が修正場所を理解しやすくなります。ただしフォームのイベントだけでは別の入力経路を守れません。両日付が空欄、片側だけ、同日、逆転の組合せを試し、業務に必要な動作を確認しましょう。
定型入力は、桁数や区切りなど入力の形をそろえるための機能です。郵便番号が実在するか、入力した住所と対応するかまでは保証しません。表示書式も主に見た目を整えるもので、業務上の正しさを確認する検査とは役割が異なります。実在性の確認が必要なら、正しい郵便番号データとの照合など別の仕組みを設計します。また先頭ゼロを失わないよう、郵便番号や電話番号は数量と違って文字列として扱うことが一般的です。保存と表示の両方を確認してください。
事前の件数チェックは案内に役立ちますが、それだけでは同時登録を完全には防げません。二人が同時に検索し、どちらも未登録と判断してから保存する可能性があるためです。業務上重複してはいけない番号や項目の組合せには、一意インデックスなど保存側の制約を設定します。そのうえで、重複エラーが発生したときに既存データを確認できるメッセージを用意します。同姓同名のように重複してよい値もあるので、何を一意にするかは業務の意味から決めてください。
まず新しい規則に違反する既存データを抽出し、その値が誤りか業務上の例外かを確認します。数量0を禁止する場合も、未確定を0で代用していたなら、状態管理など別の設計が必要です。コピーしたデータベースで境界値と各入力経路を試し、フォーム、テーブル、取込処理、手順書を一緒に更新します。旧フォームが残ると保存エラーが増えるため、配布版と適用日も管理してください。バックアップを残し、問題発生時に戻す対象と担当者を決めてから本番へ反映します。
まとめ
Accessの入力ルールは、フォームの操作補助、テーブルの保存制約、取込時の検査を組み合わせて作ります。必須と範囲、Nullと空文字、単項目と複数項目の関係を区別して設定しましょう。既存データと境界値を確かめ、変更時の配布や手順書までそろえることで、入力者が増えても品質を維持しやすくなります。
Accessの教科書で入力規則業務の改善を相談する
候補や集計条件が部署ごとに異なる、既存の画面を直せる担当者がいないなど、入力規則の手順だけでは解決しない場合は、現在のExcelと業務の流れを整理して相談すると検討が進みます。Accessの教科書のお問い合わせで、対象データ、利用人数、困っている操作をお知らせください。
関連記事
参考情報
[参考1]Microsoft 入力規則を作成してフィールド内のデータを検証する
https://support.microsoft.com/ja-jp/access/restrict-data-input-by-using-validation-rules
[参考2]Microsoft TextBox.ValidationRule
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.validationrule
[参考3]Microsoft Form.BeforeUpdate
https://learn.microsoft.com/en-us/office/vba/api/access.form.beforeupdate-event
[参考4]Microsoft ComboBox.LimitToList
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.limittolist