Access追加クエリの作成方法と重複登録を防ぐ手順

概要

この記事の結論
Accessの追加クエリは、選択したデータを既存テーブルへ新しいレコードとして登録します。
既存行の値を変える更新クエリや、新しい表を作るテーブル作成クエリと区別してください。

この記事でわかること

  • 追加元と追加先の対応を確認する
  • 選択クエリを追加クエリへ変更する
  • 既存データと追加元の両方で重複を防ぐ
  • 追加エラーは原因別に修正する

この記事の主な内容

  1. 追加クエリは既存テーブルへ新しい行を登録する
  2. 追加元と追加先の対応を確認する
  3. 選択クエリを追加クエリへ変更する
  4. 既存データと追加元の両方で重複を防ぐ
  5. 追加エラーは原因別に修正する
  6. 再取込と取消の手順を残す
  7. よくある質問

想定読了時間:約8分


1 追加クエリは既存テーブルへ新しい行を登録する

Accessの追加クエリは、選択したデータを既存テーブルへ新しいレコードとして登録します。
既存行の値を変える更新クエリや、新しい表を作るテーブル作成クエリと区別してください。

実行前に追加先をバックアップし、選択クエリで対象を確認します。
追加元の列と追加先の列を明示すると、列順の変更による誤登録を防ぎやすくなります。

3種類のクエリの違いについて、追加、更新、作成の関係を示す図

2 追加元と追加先の対応を確認する

W_取込からT_受注へ、外部受注番号、受注日、金額を追加する例です。
文字数、数値の範囲、必須項目、主キーと一意制約を確認します。
値が入っていても、追加先の型に変換できるとは限りません。

T_受注の受注IDをオートナンバーで新規採番する場合、通常は追加列から受注IDを除きます。
外部のIDを引き継ぐ場合は、採番ルールと衝突を別に検討します。

設定例と確認点

追加元追加先確認点
外部受注番号外部受注番号重複なしの業務キー
受注日受注日日付/時刻
金額金額型と範囲
指定しない受注ID追加先で採番
列の対応を確認について、元の列、先の列、検査の関係を示す図

3 選択クエリを追加クエリへ変更する

デザインビューでW_取込から必要な列だけを選び、条件と結果件数を確認します。
クエリの種類を追加へ変更し、追加先テーブルと各フィールドの対応を指定します。

追加の手順について、抽出、対応、実行、確認の関係を示す図

操作手順

1. バックアップと追加前件数を記録します。

2. 選択クエリで追加候補のIDと値を確認します。

3. 追加クエリに変更しT_受注を指定します。

4. 追加先行のフィールド対応を確認します。

5. 予定件数と一致することを確認して実行します。

6. 追加後の件数と保存値を照合します。

サンプルコードと式

INSERT INTO [T_受注] ([外部受注番号], [受注日], [金額])
SELECT [外部受注番号], [受注日], [金額]
FROM [W_取込];

採番の扱いについて、追加先ID、業務キー、元IDの関係を示す図

4 既存データと追加元の両方で重複を防ぐ

追加先に存在しない外部受注番号だけを選ぶ方法があります。
ただし追加元のW_取込自体に同じ番号が複数あれば、それも整理が必要です。
Not Existsだけですべての重複問題が解決するわけではありません。

サンプルコードと式

INSERT INTO [T_受注] ([外部受注番号], [受注日], [金額])
SELECT S.[外部受注番号], S.[受注日], S.[金額]
FROM [W_取込] AS S
WHERE NOT EXISTS
 (SELECT * FROM [T_受注] AS D
  WHERE D.[外部受注番号]=S.[外部受注番号]);

重複確認の2か所について、追加先、追加元の関係を示す図

5 追加エラーは原因別に修正する

キー違反は主キー・一意索引、型変換エラーは型や桁、入力規則違反は必須項目や範囲を確認します。
警告が出たら何件追加され、何件失敗したかを確認し、未確認のまま全件を再実行しないでください。

同時取込があり得る場合は、追加前の存在確認だけでは競合を完全に防げません。
業務キーの一意制約など、追加先側の保護も必要です。

追加できない原因について、キー、型、規則、状態の関係を示す図

既存Accessへの影響を判断できない場合

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


6 再取込と取消の手順を残す

取込バッチID、元ファイル名、実施日時、追加件数を記録すると、再実行や誤取込の確認に役立ちます。
取込後に別の担当者が修正した行は、単純にバッチ単位で消してよいとは限りません。

本番へ反映する前に、全件成功・一部失敗・再実行・空ファイルのケースを試しましょう。
入力データの検査と登録を分けると、原因を利用者へ伝えやすくなります。

取込履歴を残すについて、バッチ、日時、元ファイル、件数の関係を示す図

7 よくある質問

上書きしません。既存行の値を変える場合は更新クエリです。

条件や一意制約がなければ二重登録され得ます。取込履歴も管理します。

追加先でオートナンバー採番するなら、通常は追加列から除外します。

まとめ

本番へ反映する前に、全件成功・一部失敗・再実行・空ファイルのケースを試しましょう。
入力データの検査と登録を分けると、原因を利用者へ伝えやすくなります。

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


Microsoft公式資料を参照しています。サンプルは説明用の架空データです。
Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。

Microsoft:追加クエリ
https://support.microsoft.com/en-us/access/add-records-to-a-table-by-using-an-append-query

Microsoft:INSERT INTO
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/insert-into-statement-microsoft-access-sql

TOP