この記事ではCSng関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
CSng関数の使い方と注意点
CSng関数は、数値や文字列を単精度浮動小数点数(Single型)に変換する関数です。
小数を扱いたい場合や、計算精度を制御したい場合に利用されます。
構文
CSng(式)
- 式 : 変換したい数値または数値文字列
- 戻り値 : Single型の数値
使用例
小数をSingle型に変換
Sub Sample()
Dim value As Double
Dim result As Single
value = 123.456
result = CSng(value)
Debug.Print result
Debug.Print TypeName(result)
End Sub
▶ 出力結果
123.456
Single
→ Double型の値をSingle型に変換できます。
数値文字列をSingle型に変換
Sub Sample()
Dim strValue As String
Dim result As Single
strValue = "789.123"
result = CSng(strValue)
Debug.Print result
Debug.Print TypeName(result)
End Sub
▶ 出力結果
789.123
Single
→ 数値文字列をSingle型に変換できます。
計算結果をSingle型に変換
Sub Sample()
Dim result As Single
result = CSng(10 / 3)
Debug.Print result
End Sub
▶ 出力結果
3.333333
→ 計算結果をSingle型で保持できます。
⚠️注意
精度に注意
Single型は約7桁の精度しかないため、Double型よりも丸め誤差が生じやすいです。
高精度な計算が必要な場合はDouble型を使用してください。
Sub Sample()
Dim MyDouble As Double, MySingle As Single
MyDouble = 1234567.89
MySingle = CSng(MyDouble)
Debug.Print MyDouble
Debug.Print MySingle
End Sub
▶ 出力結果
1234567.89
1234568
→ 精度が失われていることに注意。
変換できない値はエラー
Sub Sample()
On Error Resume Next
Dim result As Single
Err.Clear
result = CSng("abc")
If Err.Number <> 0 Then Debug.Print "エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
エラー:型が一致しません。
範囲外の値はオーバーフロー
Single型の最大値(約3.402823E38)を超える値はオーバーフローになります。
Sub Sample()
On Error Resume Next
Dim result As Single
result = CSng(1E+40)
If Err.Number <> 0 Then Debug.Print "エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
エラー:オーバーフローしました。
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方