こんにちは、Accessブロガーのなかぜんです。
AccessやVBAを使っていると、初心者の方からよくこんな声を聞きます。
「クエリを実行したら『データ型の不一致です』ってエラーが出たんですけど…どうしたらいいですか?」
はい、これ…Accessあるあるですね。安心してください!このエラー、ちゃんと原因と対処法を知れば、誰でも乗り越えられます。
この記事では「データ型の不一致」エラーの意味と、具体的な対処方法を、やさしく、ていねいに解説していきます。
1. 「データ型の不一致」ってどういうこと?
このエラーは、Accessが「異なる種類のデータを比べたり、計算しようとしてるけど、無理だよ!」と教えてくれているサインです。
たとえば、数値型のフィールドに文字列(テキスト)を代入しようとしたり、日付型と文字列型を比較しようとしたときなどに発生します。
よくある例
- テーブルの「ID」が数値型なのに、クエリで「’123’」のように文字列で検索
- フォームで日付型のフィールドに、ユーザーが「abc」など無効な文字を入力
- VBAで数値と文字列を計算しようとする
2. 実際のコード例と解説
間違ったコード例
Dim sql As String
sql = "SELECT * FROM T_社員 WHERE 社員ID = '123'"
CurrentDb.OpenRecordset sql
解説:「社員ID」が数値型なのに、'123'
と文字列で検索しているため、エラーになります。
正しいコード例
Dim sql As String
sql = "SELECT * FROM T_社員 WHERE 社員ID = 123"
CurrentDb.OpenRecordset sql
ポイント:数値はシングルクォート(’)で囲まない!
3. データ型の確認方法
エラーの原因を突き止めるには、まずフィールドのデータ型を確認しましょう。
テーブルで確認する
- テーブルをデザインビューで開く
- 対象フィールドの「データ型」列を見る
フォーム・VBAで確認する
Debug.Print VarType(Me.txt入力値)
VarType関数を使えば、VBAで変数やコントロールの型を調べられます。

4. よくあるミスとその対処法
ミス1:日付型の値にクォーテーションを忘れる
sql = "SELECT * FROM T_予定 WHERE 開始日 = " & Me.txt日付
↑これはNG。日付は # で囲む必要があります。
sql = "SELECT * FROM T_予定 WHERE 開始日 = #" & Format(Me.txt日付, "yyyy/mm/dd") & "#"
ミス2:Nullとの比較に = を使う
If Me.txt備考 = Null Then
↑これは常にFalseになります。Nullは Is Null
または Is Nothing
を使って判断しましょう。
If IsNull(Me.txt備考) Then
5. 中級者向けの応用ポイント
① 型変換関数を活用しよう
CLng
:整数に変換CDate
:日付に変換CStr
:文字列に変換
ユーザーの入力を数値や日付に変換しておくことで、エラーを予防できます。
② エラーハンドリングを入れて安全に
On Error Resume Next
Dim dt As Date
dt = CDate(Me.txt日付)
If Err.Number > 0 Then
MsgBox "正しい日付を入力してください"
Exit Sub
End If
On Error GoTo 0
ポイント:ユーザーが入力ミスしても、優しくフォローできます。
6. まとめ:今日の学び&次のステップ
Accessでよくある「データ型の不一致」エラー。原因さえわかれば、ちゃんと解決できます。
- まずはデータ型を確認!
- 数値・日付・文字列の区別に注意
- VBAでは型変換&エラーハンドリングで安全に
最初は難しく感じるかもしれませんが、慣れてくると「ここでエラー出そうだな」って予測できるようになりますよ😊
Accessともっと仲良くなるために、次は「リレーションシップと参照整合性」について学ぶのもオススメです!
