【初心者向け】Accessで「#エラー」が出る理由と直し方
Accessでクエリやフォームを作っていると、
計算結果が表示されるはずの場所に
#エラー
#Name?
#Type!
といった 「#から始まる文字」 が表示されることがあります。
初めて見ると
「壊れた?」「何が間違ってるの?」
と思ってしまいますが、Accessではよくあるエラー表示です。
この記事では、
初心者の方でも理解できるように説明します。
そもそも「#」って何?
「#」はで始まる文字列は、
Accessが計算できませんでした
というサインです。
原因はほとんどが次の3つです。
1.名前の書き間違い
2.空っぽ(Null)のデータ
3.Accessに存在しない書き方
日本語版Accessのエラー表示は「#エラー」で統一される
実はAccessには本来、複数の種類のエラーがあります。
・#エラー(計算不可)
・#Name?(名前が違う)
・#Type!(データ型が違う)
・#Div/0!(0で割っている)
しかし、日本語版のフォームとレポートでは、どんな種類のエラーでも、
すべて「#エラー」 として表示されます。
つまり、
✔ フォーム → なんでも「#エラー」
✔ レポート → 同じく「#エラー」
✔ クエリだけ → 本来のエラー名がそのまま出る(#Name? など)
これを知っているだけで、原因を探すときの迷いが減ります。
「#エラー」が出る原因
・フィールド名を間違えている
・計算式がおかしい
・コントロール名とフィールド名が同じ
・計算結果が不正(Null × 数値 など → Typeエラー)
例
実際は [数量] が存在しない → Nameエラー
フォームではすべて「#エラー」と表示される
確認ポイント
・フィールド名は正しいか
・全角・半角が混ざっていないか
・コントロール名がフィールド名と同じになっていないか
「#Name?」が出る原因
名前が間違っている時のエラー。
ただしフォームでは「#エラー」に統一されます。
原因
・フィールド名・関数名の書き間違い
・Excelの書き方をそのまま使っている
・クエリに無い項目をフォームで参照している
よくある間違い
正しい書き方(Access)
Accessでは IF ではなく IIf を使います。
「#Type!」が出る原因
・数字と文字列を混ぜて計算している
・空欄(Null)を計算している
・関数の引数が型に合わない
例
どちらかが空だとエラーになります。
直し方
Nz は「空なら0にする」便利な関数
「#Div/0!」が出る原因
・数量が 0 または Null の状態で割り算している
例
数量が 0(ゼロ)または空欄のままだとAccess がエラーを出します。
直し方
フォーム・レポートでよくあるエラーと注意点
フォーム・レポートで特に注意すること
・初心者がよくやるエラーの原因です。
・元のクエリに無い項目を使う
・コントロール名とフィールド名が似ていて間違える
・サブフォーム(サブレポート)を正しく参照できていない
必ず
「この画面はどのクエリを使っているか」
を確認しましょう。
エラーが出たときのチェック
・項目名のスペルは合っている?
・Excelの書き方を使っていない?
・Nzで空データ対策している?
・割り算で0になっていない?
これだけで 9割は解決します。
サブフォーム参照で 「#エラー」 が出る原因と対処
Accessでよくある実務的な操作として、
サブフォームに入力した明細の合計金額を、親フォーム側に表示したい
というケースがあります。
この操作で参照方法を間違えると、今回紹介した #エラー が出やすいため、
正しい書き方を知っておくと便利です。

① サブフォーム側で合計を作る
1.サブフォームをデザインビューで開く
2.フォームフッターにテキストボックスを置く
3.コントロールソースに合計式を入れる:
(※ [金額] は実際のフィールド名に合わせる)
4.テキストボックスに名前をつける
例:
② 親フォーム側でサブフォームの合計を参照する
親フォームにテキストボックスを置き、
コントロールソースに次のように書きます。
ここでよく起きるのが、
・サブフォームの「フォーム名」と「サブフォームコントロール名」を混同する
・合計テキストを作っていないのに参照しようとする
どちらもフォーム上では #エラー と表示されます。
まとめ
「#」で始まるエラーは、
Accessからの「ここ計算できないよ!」というヒントです。
特に日本語版ではフォーム・レポートで
全部「#エラー」に見えるため原因が分かりにくいですが、
・名前(Name)
・空欄(Null)
・書き方(Excel式など)
この3つを順番に確認すれば、初心者でも必ず直せます。


