値を倍精度浮動小数点数に変換する、CDbl関数の使い方を解説します。
基本形
CDbl(変換したい値)
実行例
CDbl("123") ' = 123 CDbl("\1,000") ' = 1000 CDbl("あいう") ' 「型が一致しません」エラー CDbl(123.45) ' = 123.45 CDbl(True) ' = -1 CDbl(#2025/5/18#) ' = 45473 CDbl(#2025/5/18 14:00#) ' = 45795.5833333333
解説
CDbl関数は指定した値を倍精度浮動小数点数(Double型)に変換する関数です。
Double型は高精度の小数を扱うことができ、最大値もLong型より大きいため、
小数が発生する数値には基本的にはこの型を使うことになります。
そして重要なのが「セル値が数値の場合はDouble型」であることで、
RangeオブジェクトのValueプロパティは数値であればDouble型になっています。
セル値と互換性を持たせる場合もこの型を使用してください。
本関数は渡された文字列形式の数字をセルと同型の数値に変換するということで、
シート関数「VALUE関数」とほぼ同じ動きをする関数です。
この用途が必要な場合はCDbl関数を使用してください。
なお似た関数に「Val関数」がありますが、こちらは実は全然違う関数です。
名前が似ていますので勘違いしないよう注意して下さい。
www.limecode.jp
なおCDbl関数は「文字列を数値に変換する」用途に使用できると書きましたが、
VBAは暗黙の型変換を行ってくれる言語のため、
Dim Double変数 As Long Double変数 = "\1,000"
この代入でもCDbl関数と同じ処理が実行され、変数にはしっかり1000が入ります。
本関数は変数を用意せず直接セルなどに出力するときなどに使用してください。
Range("A1").Value = CDbl(String型に入っている数値)
シリアル値への変換
本関数は「文字列⇒数値」を行う関数ですが、
もう一つ重要な仕様として「日付型⇒シリアル値」への変換が行えます。
CDbl(#2025/5/18#) ' = 45473 CDbl(#2025/5/18 14:00#) ' = 45795.5833333333
シート上で扱う日付(シリアル値)は書式設定的な面が強く、
日付を入力しても書式を「G/標準」にするだけで数値(Double型)になります。
しかしVBA上で扱う日付はDate型というDoubleとは別のデータ型であるため、
整数や小数として扱えないことがたまにあります。
その際は本関数でDouble型(シート上でのシリアル値)に変換してください。
特にこの関数が必要になる場面として頻出なのが、
WorksheetFunction.Match などの検索関数で日付を検索するときです。
シート上の日付は検索時には「Double型の小数」として検索されるため、
以下のコードでは日付を発見できない仕様になっています。
' これは同じ日付でも発見することができない WorksheetFunction.Match(Date型変数, 日付が入ったセル範囲, 0)
シート上の日付を検索する際は、CDbl関数を使用して以下の通り実行してください。
WorksheetFunction.Match(Cdbl(Date型変数), 日付が入ったセル範囲, 0)