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点
Null が入る可能性はあるか
数値として扱う必要があるか
明示的に変換しているか
この3点を見るだけで
9割の「型が一致しません」は解決します。
まとめ
「型が一致しません」は Null が主犯
文字列と数値の混在にも注意
NzとCxxxを組み合わせるのが安全VBAより データの状態を疑う
👉 エラー文よりも「中身」を見るのがAccess攻略の近道です。

