【Access VBA】数値と文字列の変換方法|型不一致エラー対策

Access VBAで「型が一致しません」というエラーが発生して困ったことはありませんか?
このエラーは数値と文字列の型が一致していない場合によく発生します。
そこで本記事では数値と文字列を安全に変換する方法について解説します。
- 「型が一致しません」エラーの主な原因
- 数値と文字列の違いによるエラー例
- CLng・CDbl・Val・CStrを使った型変換方法
- Nullチェック・IsNumericを使った安全な対策
型が一致しませんエラーの原因
Accessでは異なるデータ型同士を比較・計算した際に「型が一致しません」というエラーが発生します。
Access VBAでよく発生するエラーの例を紹介します。
数値と文字列を直接代入
数値型の変数に数値として解釈できない文字列を代入するとエラーになります。
Dim num As Long
num = "ABC"同じ文字列でも数字として解釈できる場合は自動的に数値へ変換されます。
Dim num As Long
num = "123"検索条件の型が合っていない
SQLの条件でフィールドの型と値の指定方法が合っていないと意図しない結果になることがあります。
Dim sql As String
sql = "SELECT * FROM T顧客 WHERE 顧客ID = '10'"
CurrentDb.OpenRecordset sqlこの例では、顧客IDが数値型なのに文字列として指定しています。
数値と文字列を変換する方法
VBAでは、数値と文字列の型を明示的に変換することでエラーを防ぐことができます。
文字列 → 数値に変換
文字列を数値として扱いたい場合は変換関数を使います。
CLng関数
Dim num As Long
num = CLng("123")CDbl関数
Dim num As Double
num = CDbl("123.45")Val関数
Dim num As Double
num = Val("123ABC")CLng・CDbl・Val関数を使うことで文字列を数値に変換できます。
ただし、それぞれ特徴が異なり、使いどころも違います。
CLng・CDbl・Valの違いや使い分けについては以下の記事で解説しています👇

数値 → 文字列に変換
CStr関数
Dim str As String
str = CStr(123)Dim str As String
str = CStr(123.45)CStr関数を使うことで数値を文字列に変換できます。
数値を文字列として結合したいときや、フォームやSQLに渡すときによく使います。
実務で使えるVBA例
テーブルから取得して変換
Dim rs As DAO.Recordset
Dim num As Long
Set rs = CurrentDb.OpenRecordset("SELECT 顧客ID, 顧客名 FROM T_顧客 WHERE 顧客ID = 1")
If Not rs.EOF Then
num = CLng(rs!顧客ID)
End If
rs.Close
Set rs = Nothingレコードセットから取得した値はVariant型のため、そのままでは数値として扱えない場合があります。
そのためCLng関数で数値に変換しています。
- テーブル → クエリ → Recordset の流れ
- rs!顧客ID は Variant なので変換必要
- EOFチェックは実務必須
フォーム入力→変換
Dim rs As DAO.Recordset
Dim sql As String
sql = "SELECT 顧客ID, 顧客名 FROM T_顧客 WHERE 顧客ID = " & CLng(Me.txt顧客ID.Value)
Set rs = CurrentDb.OpenRecordset(sql)
If Not rs.EOF Then
Me.txt顧客名.Value = rs!顧客名
End If
rs.Close
Set rs = Nothingフォームのテキストボックスの値は文字列として扱われるため、数値として使用する場合は変換が必要です。
そのままSQLに渡すと型不一致や意図しない結果になることがあります。
- Me.txt顧客ID → ユーザー入力
- CLngで型を揃えてからSQLへ
- SQL文字列結合はAccessでよくあるパターン
- 取得結果をフォームへ反映
よくあるミスと注意点
Null値をそのまま変換している
Nullの値をそのまま変換するとエラーになることがあります。
Dim id As Long
id = CLng(Me.顧客ID)入力値がNullの場合数値に変換できずエラーになる可能性があります。
代入する前にNullチェックを行うことで安全に処理できます。
If Not IsNull(Me.顧客ID) Then
id = CLng(Me.顧客ID)
End If数値以外の文字列を変換している
数値に変換できない文字列を変換するとエラーになります。
Dim id As Long
id = CLng("ABC")文字列が数値として解釈できない場合変換時にエラーが発生します。
数値かどうかを判定するIsNumeric関数を使うことでエラーを防ぐことができます。
If IsNumeric(Me.txt顧客ID.Value) Then
id = CLng(Me.txt顧客ID.Value)
End Ifまとめ
今回は数値と文字列を安全に変換する方法について解説しました。
VBAでは、変数やフィールドの型が一致していないとエラーの原因になります。
特に処理が増えてくると型の不一致が発生しやすくなります。
そのため型変換やNullチェック、数値チェックを適切に行い安全な設計を心がけましょう。
コメント