Excel VBAの「CDec 関数」について解説します。
CDec 関数とは
Excel VBA の CDec 関数は、引数をDecimal型(10進数データ型)に変換するデータ型変換関数のひとつです。
Decimal型は数値を記録するデータ型の一つで、指定した桁数の10進数の実数を指定された精度で格納します。
では、CDec 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
CDec 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
CDec(expression)
引数
引数 | 説明 |
---|---|
expression | 【必須】任意の数値(式)または文字列(式)を指定します |
戻り値
戻り値 | 説明 |
---|---|
Decimal型の数値 (10進数データ型) | 引数を評価してDecimal型(10進型)の値に変換して返します 【Decimal型(10進型)の範囲】 ・Decimal型(10進型)の最大桁数は 29 桁です ・小数がない場合の利用可能な最大値は、 +/-79,228,162,514,264,337,593,543,950,335 です ・小数がある場合の利用可能な最大値は、 +/-7.9228162514264337593543950335 です ※ 小数点以下 28 桁 (全体では 29 桁) ・0 を除く絶対値の最小値は、 +/-0.0000000000000000000000000001 です |
Decimal型の変数宣言はできない点に注意
現時点のVBAでは、「Dim 変数名 As Decimal」のように Decimal型の変数を宣言することはできません。
Decimal型は Variant 内でのみ使用できます。CDec 関数を使用してサブタイプが Decimal の Variant 型を作成できます。したがって、変数宣言は「Dim 変数名 As Variant」とし、CDec 関数を使って代入する方法をとればDecimal型の変数として数値を格納することができます。
解説(使用例)
サンプルコードを使って解説します。
CDec 関数の引数と戻り値を確認するサンプル
いろいろな引数を Decimal型に変換して結果をイミディエイトに表示させます。
'■CDdec関数サンプル
Sub CDec_Sample()
On Error GoTo ErrH
'▼数値の引数は Double型の桁数になる
Debug.Print CDec(123456789012345#) '数値はDouble型15桁まで
Debug.Print CDec(123.456789012346) '小数も15桁に丸められる
'▼引数が文字列の場合でCDec関数の桁数確認
'小数が無い場合は29桁以上はエラーになる
Debug.Print CDec("123456789012345678901234567890123456789")
Debug.Print CDec("12345678901234567890123456789")
'小数がある場合は全体が29桁に丸められる
Debug.Print CDec("123.456789012345678901234567890123456789")
Debug.Print CDec("1234567890.12345678901234567890123456789")
'▼引数が16進数や2進数の場合
Debug.Print CDec("&H64") '16進数リテラルで値100を渡す
Debug.Print CDec("&B01100100") '2進数リテラルはVBAでは使えない
'▼小数のある数値の演算では誤差が発生する例
Debug.Print 10 / 7 '1.42857142857143
Debug.Print 10 / 7 - 1 '0.428571428571429
Debug.Print CDec(10 / 7) '1.42857142857143
Debug.Print CDec(10 / 7) - 1 '0.42857142857143
Debug.Print CDec(CDec(10) / 7) '1.4285714285714285714285714286
Debug.Print CDec(CDec(10) / 7) - 1 '0.4285714285714285714285714286
Exit Sub
'エラーハンドラー
ErrH:
Debug.Print "エラー" & Err.Number & Err.Description
Resume Next
End Sub
このコードを実行したイミディエイト画像がこちらです。
4行目に On Error GoTo ErrH を置いて、エラーが発生した場合処理を分岐して継続できるようにしています。
1番目(7行目)、15桁の数値を入力したところ Double型 を意味する記号「#」が最後尾に現れました。数値は自動的に Double型 になるので、整数の場合 15 桁までに限られます。
2番目(8行目)、小数のある数値の場合 15 桁までに限定され 15桁以降の部分は丸めて四捨五入されます。
3番目(12行目)、引数を32,768文字までセットできる文字列にして 39桁分セットしてみました。しかし、CDec関数の最大桁数 29 を超えているためオーバーフローエラーが発生しました。
4番目(13行目)、引数の文字列を 29桁にして実行しています。
5番目(15行目)、小数ある場合は、引数に 29桁以上をセットしてもエラーは発生しません。ただし、戻り値は 29桁に丸められます。
6番目(16行目)、小数点の位置を変更しても戻り値は全体で 29桁に丸められます。
7番目(19行目)、16進数リテラルが引数の場合、正しく 10進数に変換でき 100 を返しました。
8番目(20行目)、2進数リテラルが引数の場合、エラー13「型が一致しません。」でした。2進数リテラルはVBAではサポートされていません。
9番目(23行目)、2進数リテラルが引数の場合、エラー13「型が一致しません。」でした。2進数リテラルはVBAではサポートされていません。
11~12番目(23~24行目)、Double型の場合、整数部が 0 になって小数部が15桁になっています。
13~14番目(25~26行目)、CDec関数で変換していますが、引数部分が Double なので 15桁になっています。
15~16番目(27~28行目)、CDec関数内の引数に CDec関数を使用することでDecimal型の最大 29桁(小数部28桁)になりました。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA CDec 関数は、引数に指定した任意の文字列式または数式を Decimal型(10進型)に変換データ型変換関数です。
Decimal型は、金融計算などの精度が要求される場面で使用されます。
VBAで小数のある数値の計算を行う場合、一般的には浮動小数点数を使用しますが、演算誤差が発生する場合があります。そんな時は、より正確な小数の計算を行うことができる Decimal型や通貨型を使うことを検討してみてください。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;