和風スパゲティのレシピ

日本語でコーディングするExcelVBA

値を単精度浮動小数(Single型)に変換する - CSng関数

値を単精度浮動小数点数に変換する、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型となりますのでこちらもご注意ください。

www.limecode.jp