access PR

Accessでよく出る「型が一致しません」エラーの正体

記事内に商品プロモーションを含む場合があります

Accessで頻繁に出る
「型が一致しません」 エラーの正体は、ほとんどの場合

  • Null が混じっている

  • 文字列と数値を混在させている

このどちらかです。

VBAの文法ミスではなく、
データの状態が原因であることが非常に多いのが特徴です。


「型が一致しません」が出る典型的な場面

よくあるのは次のようなコードです。

Dim x As Long
x = Me!Text0.Value

一見問題なさそうですが、
TextBox が Null の場合、ここでエラーになります。

👉 Accessでは Null は数値ではありません


原因①:Null が混じっている

Accessで最も多い原因が Null です。

よくあるパターン

  • 未入力のTextBox

  • レコードが存在しない

  • 集計関数の結果が Null

Dim x As Long
x = Me!Text0.Value ‘ ← Nullだとエラー

安全な対処法(Nz関数)

Dim x As Long
x = Nz(Me!Text0.Value, 0)

✔ Nullなら 0
✔ 型の不一致を回避できる

TextBoxの値を安全に扱えるようになったら、次は クリップボードへのコピー処理を実装すると作業効率が上がります。
👉 Access VBAでClipboardを扱う最も簡単な方法(API不要・64bit対応)


原因②:文字列と数値が混在している

次に多いのが 型の混在 です。

Dim x As Long
x = “123”

見た目は数値でも、
ダブルクォーテーションが付くと 文字列 です。

明示的に変換する

Dim x As Long
x = CLng(Me!Text0.Value)

※ ただし Null が来ると CLng でもエラーになります。

Null + 型変換の安全な書き方(おすすめ)

実務で一番安全なのがこの形です。

Dim x As Long
x = CLng(Nz(Me!Text0.Value, 0))

✔ Null対策
✔ 型変換
✔ エラーを防げる


Variantを使っても解決しない理由

「Variantなら大丈夫では?」と思いがちですが、

Dim v As Variant
v = Me!Text0.Value

このあと、

Dim x As Long
x = v

👉 結局ここでエラーになります。

Variantは
「何でも入る」だけで、
「安全に変換してくれる」わけではありません。


よくある勘違い

❌ Accessのバグ
❌ VBAの不具合
❌ Officeの相性問題

👉 ほぼ確実に データ型の問題です。


エラーが出たら最初に確認する3点

  1. Null が入る可能性はあるか

  2. 数値として扱う必要があるか

  3. 明示的に変換しているか

この3点を見るだけで
9割の「型が一致しません」は解決します。

まとめ

  • 「型が一致しません」は Null が主犯

  • 文字列と数値の混在にも注意

  • NzCxxx を組み合わせるのが安全

  • VBAより データの状態を疑う

👉 エラー文よりも「中身」を見るのがAccess攻略の近道です。