値を単精度浮動小数点数に変換する、CSng関数の使い方を解説します。
基本形
CSng(変換したい値)
実行例
' 各型の変換仕様 CSng("100") ' = 100 CSng("123.456") ' = 123.456 CSng("1.23E3") ' = 1230 CSng("あいう") ' 「型が一致しません」エラー ' 精度面 CSng(123.45678) ' = 123.4568 ' 全部で7桁分しか保持できない CSng(123.45655) ' = 123.4566 CSng(123.45665) ' = 123.4566 ' 最後の桁は四捨五入だが小数誤差によってはそうならない CSng(1 / 3) ' = 0.3333333 CDbl(1 / 3) ' = 0.333333333333333 ' Double型は15桁保持可能
解説
CSng関数は数値や文字列などをSingle型(単精度浮動小数点数)に変換する関数です。
実行例の通り、文字列の "123.456" を渡すと数値の123.456として返されます。
15桁の浮動小数(整数部と小数部を合わせて15桁持てる)Double型に比べて、
Single型は整数部と小数部を合わせて7桁しか持てません。
よって精度面でも危険性をはらんでいるのですが、
それより重要なのが「セルの値は(数値なら)Double型である」という点です。
ExcelVBAにおいてセルと型の違う小数を用いることは危険極まりないため、
Single型はそもそも使用してはいけません。
よって本CSng関数もよほどのことがない限りは使用しない関数となります。
メモリを節約できるといいつつ、ただの数値に使うメモリなどたかが知れていますし、
ExcelVBAにおいて小数を扱う場合はDouble型を用いてください。
ちなみに「小数誤差を減らせる」という誤情報をたまに目にしますが、
Double型をSingle型にすると小数誤差はむしろ増えます。
正しくは「固定小数点型にすると小数誤差を減らせる」であり、
その際使用するのはCurrency型となりますのでこちらもご注意ください。