Accessの追加クエリを使っていると、「Nullをフィールドに挿入したい」「追加クエリを実行したらNullになってしまった」「Nullが含まれるレコードだけ追加したい」といった場面に出会います。
Nullはゼロや空文字とは別の概念であるため、扱い方を正しく理解しておく必要があります。
この記事では、追加クエリとNullに関する操作を場面別にまとめて解説します。
そもそもNullとは
AccessにおけるNull(ヌル)とは、「値が入力されていない」状態を指す特殊な概念です。
数値の 0 や長さゼロの文字列(空文字 "")とは別物で、「データそのものが存在しない」という意味を持ちます(Microsoft Learn「INSERT INTO ステートメント」)。
| 種類 | 値の有無 | 表示 |
|---|---|---|
| Null | なし(未入力) | 空白 |
| 空文字(””) | あり(長さ0) | 空白に見えるが値が存在する |
| 0 | あり(数値) | 0 |
この違いを意識せずに追加クエリを組むと、意図しない動作やエラーが起きやすいです。
場面1:追加クエリで特定フィールドにNullを意図的に挿入する
追加先テーブルのフィールドにNull値を意図的に挿入したい場合、2つの方法があります。
方法A:フィールドリストから対象フィールドを省略する
追加クエリのSQL(INSERT INTO文)で、Nullを挿入したいフィールドをフィールドリストから省略すると、そのフィールドには「既定値またはNull値」が挿入されます(Microsoft サポート「INSERT INTO ステートメント」)。
INSERT INTO T_注文 (注文ID, 顧客名)
VALUES (1, '山田太郎');
-- 「備考」フィールドを省略 → Nullが挿入される
ただし、「既定値が設定されているフィールド」を省略した場合は既定値が優先されます。
Nullを確実に挿入したい場合は、次の方法Bを使ってください。
方法B:VALUES句にNullキーワードを明示する
VALUES句でNullを挿入したいフィールドに Null キーワードを直接指定します。
INSERT INTO T_注文 (注文ID, 顧客名, 備考)
VALUES (1, '山田太郎', Null);
このように明示することで、既定値の有無に関わらず確実にNullが挿入されます。
デザインビューで操作する場合
グラフィカルなデザインビューでNullを固定値として挿入したい場合は、フィールド行に次のように記述します。
- 「作成」タブ → 「クエリデザイン」を開く
- 追加元テーブルを追加
- クエリの種類を「追加」に変更
- Nullを挿入したいフィールドのフィールド行に
Nullと入力 - 「レコードの追加」行に追加先のフィールド名を指定
フィールド行に 列名: Null と書くことで、その列の値を常にNullにする空白列として機能させることもできます。
場面2:追加クエリ実行後にフィールドがNullになってしまう(エラーへの対処)
追加クエリを実行したとき、次のようなエラーメッセージが表示されることがあります。
「追加クエリですべてのレコードを追加できません。型変換エラーのため、〇個のフィールドをNullに設定しました。」
このメッセージが出た場合、「はい」をクリックするとクエリは実行されますが、型変換エラーになったフィールドの値がNullに置き換えられて挿入されます(Microsoft サポート「追加クエリを実行するときによくあるエラー」)。
原因:データ型の不一致
このエラーの最も多い原因は、追加元フィールドと追加先フィールドのデータ型が一致していないことです。
例: 追加元が「テキスト型」、追加先が「数値型」の場合、変換できない値はNullとして挿入されます。
対処法
- デザインビューで追加元テーブルを開き、対象フィールドのデータ型を確認する
- 追加先テーブルのデータ型と一致させる
- データ型を変更できない場合は、クエリの演算フィールドで型変換を行う(例:
CLng([金額フィールド])で長整数型に変換)
また、「空文字列の許可」設定の不一致もエラーの原因になります。
追加元テーブルで「空文字列の許可:はい」、追加先テーブルで「空文字列の許可:いいえ」の組み合わせの場合、空文字列データがNullに変換されます。
追加先テーブルの対象フィールドのプロパティを確認して、設定を合わせてください。
場面3:Nullが含まれるレコードだけを追加クエリの対象にする
「特定のフィールドがNullになっているレコードだけを別テーブルに移したい」という場合は、選択クエリの抽出条件に Is Null を使います。
手順
- 「作成」タブ → 「クエリデザイン」を開く
- 対象テーブルを追加し、フィールドをグリッドに配置
- Nullを条件にしたいフィールドの「抽出条件」行に
Is Nullと入力 - クエリの種類を「追加」に変更し、追加先テーブルを指定して実行
INSERT INTO T_未入力一覧 (注文ID, 顧客名)
SELECT 注文ID, 顧客名
FROM T_注文
WHERE 備考 Is Null;
逆に「Nullでないレコードだけを対象にする」には、Is Not Null を使います。
WHERE 備考 Is Not Null
注意: NullはSQL上で = Null や <> Null とは比較できません。
必ず Is Null / Is Not Null を使ってください。
場面4:追加クエリ実行後にNullを別の値に変換して表示する
追加クエリで挿入したレコードをクエリやレポートで表示するとき、Nullのフィールドを「0」や「登録なし」などに置き換えて表示したい場合は、Nz(ナルズィー)関数を使います。
Nz(値, 変換値)
Nullなら変換値を返し、Nullでなければ元の値をそのまま返す関数です(できるネット「Accessの関数でNull値を別の値に変換する方法」)。
使用例:
SELECT 注文ID, Nz([備考], '未入力') AS 備考表示
FROM T_注文;
この書き方で、「備考」がNullのレコードには「未入力」と表示されます。
数値フィールドの場合は変換値を 0 にすると集計処理が安定します。
場面5:既存フィールドをNullに更新したい場合
追加クエリではなく、すでに挿入されているレコードのフィールド値をNullに変更したい場合は、更新クエリを使います。
- 「作成」タブ → 「クエリデザイン」を開く
- 対象テーブルを追加
- クエリの種類を「更新」に変更
- Nullに更新したいフィールドを追加し、「レコードの更新」行に
Nullと入力 - 必要に応じて抽出条件を設定して対象レコードを絞り込む
UPDATE T_注文
SET 備考 = Null
WHERE 注文ID = 1;
ただし、フィールドの「値要求」プロパティが「はい」に設定されている場合はNullへの更新ができません。
その場合は、対象フィールドのプロパティを「値要求:いいえ」に変更してから実行してください。
追加クエリとNullに関するよくある疑問
Q. 主キーフィールドにNullを挿入できますか?
できません。
主キーフィールドにはNull以外の一意な値を挿入する必要があり、Nullが挿入されるとレコードの追加自体が失敗します(Microsoft Learn「INSERT INTO ステートメント」)。
Q. オートナンバー型フィールドはどう扱えばいいですか?
追加クエリにオートナンバー型フィールドを含めない場合、新しいレコードには自動的に新しい番号が割り当てられます。
元のテーブルのオートナンバー値をそのまま引き継ぎたい場合のみ、フィールドリストに含めます。
Q. 型変換エラーを事前に確認できますか?
追加クエリの抽出条件と同じ条件で選択クエリを先に実行すると、追加対象レコードを事前に確認できます。
データ型の不一致が疑われる場合は、本番の追加クエリを実行する前に選択クエリで内容を確認しておくと安全です。
まとめ
AccessのクエリでNullを扱う方法を場面別に整理すると、次のとおりです。
- Nullを意図的に挿入する場合:VALUES句に
Nullと明記するか、フィールドを省略する - 追加後に予期せずNullになった場合:データ型の不一致が原因のため、型を合わせる
- Nullを条件にレコードを絞り込む場合:抽出条件に
Is Nullを使う - Null表示を別の値に変換したい場合:Nz関数を使う
- 既存レコードをNullに戻す場合:更新クエリで
Nullを設定する
Nullの扱いに慣れると、追加クエリのトラブルを大幅に減らせます。
各手順を試す際は、本番テーブルの前に必ずダミーテーブルで動作確認することをおすすめします。
参考情報源:

コメント