【Access VBA】CLng・CDbl・Valの違いと使い分け

Access VBAでは文字列を数値に変換するCLng・CDbl・Val関数がよく使われます。
しかし、それぞれの違いや使い分けが分かりにくいと感じたことはありませんか?
本記事ではCLng・CDbl・Val関数の違いと使い分けについて分かりやすく解説します。
- CLng・CDbl・Valのそれぞれの特徴と違い
- 文字列を数値に変換する基本的な使い方
- フォーム入力やSQLでの実務的な型変換の方法
- 用途に応じた関数の使い分けポイント
CLng・CDbl・Valの違い
CLng・CDbl・Valはどれも文字列を数値に変換する関数ですが、変換方法や扱い方には違いがあります。
整数に変換する、小数を扱う、数値だけ取り出すなどそれぞれ用途が異なります。
3つの関数の特徴について簡単にまとめると下の表の通りです。
| 関数 | 特徴 |
|---|---|
| CLng | 整数に変換(小数は四捨五入される) |
| CDbl | 小数を含めて変換 |
| Val | 数値として解釈できる部分だけを取り出す |

似ているようで動きが違うため、使い分けがポイントになります!
それぞれの特徴や使い分けについては次の項目で詳しく解説します。
CLng関数の特徴と使い方
CLngは「文字列や数値を整数に変換する関数」です。
基本的な使い方
CLng関数は変換したい値をCLng()で囲んで使用します。
Dim num As Long
num = CLng("123.6") ' → 124ポイント
小数がある場合は四捨五入されて整数になります。
よくある使い方
Dim id As Long
id = CLng(Me.顧客ID.Value)Accessではフォームの入力値はすべて文字列として扱われます。
数値として扱う場合はCLngで変換する必要があります。
注意点
CLng("ABC")数値に変換できない値を指定すると、「型が一致しません」エラーが発生します。
「型が一致しません」エラーの対策についてはこちら👇

CDbl関数の特徴と使い方
CDblは「文字列や数値をDouble型(小数対応)に変換する関数」です。
CLngが整数専用なのに対して、CDblは小数を含む数値をそのまま扱えるのが特徴です。
基本的な使い方
Dim num As Double
num = CDbl("123.45")CDblは文字列を小数として扱いたい場合に使用します。
整数との違い
小数点が保持されない
vDim num1 As Long
num1 = CLng("123.45") ' → 123(四捨五入)小数点がそのまま保持される
Dim num2 As Double
num2 = CDbl("123.45") ' → 123.45CLngは整数に変換されるのに対し、CDblは小数点以下もそのまま保持します。
よくある使い方
Dim discountRate As Double
discountRate = CDbl(Me.割引率.Value) ' 0.1 = 10%計算処理など小数を扱う場面でよく使用されます。
注意点
CDbl("ABC")数値として解釈できない文字列を変換するとエラーになります。
CLngと同様に入力値には注意が必要です。
Val関数の特徴と注意点
Valは「文字列の中から数値として解釈できる部分だけを取り出して数値に変換する関数」です。
CLngやCDblと違い、文字が混ざっていても変換できる点が特徴です。
基本的な使い方
Dim num As Double
num = Val("123")Valは文字列を数値として扱いたい場合に使用します。
他の関数との違い
CLng・CDblの場合
CLng("123ABC") ' → エラー
CDbl("123ABC") ' → エラーValの場合
Val("123ABC") ' → 123
Val("ABC123") ' → 0Valは「先頭から数値として解釈できる部分だけ」を取得します。
よくある使い方
Dim num As Double
num = Val(Me.金額.Value)フォームの入力値など、不正な文字が混ざる可能性がある場合の簡易的な数値変換として使用されます。
注意点
Valは便利ですが意図しない結果になることがあります。
Val("ABC123") ' → 0数値が後ろに含まれていても取得できず0として扱われてしまいます。
そのためデータの正確性が必要な処理には向いていません。
まとめ
今回はCLng・CDbl・Valの違いと使い分けについて解説しました。
それぞれの特徴を整理すると以下の通りです。
- CLng:整数に変換(四捨五入あり)
- CDbl:小数を含めて変換できる
- Val:文字列から数値部分だけを取得
用途に応じて正しく使い分けることで、型不一致エラーを防ぐことができます。
特にAccess VBAではフォーム入力やSQL処理で型の違いによるエラーが起きやすいため、適切な変換を意識することが重要です。
コメント