【VBA】文字列を数値に変換する方法(Val関数とCInt関数など)
今回はVBAで文字列を数値に変換する方法を紹介します。
VBAで文字列を数値に変換する方法は大きく次の2つがあります。
- Val関数で変換する (適切な型の数値となる)
- CInt,CLng,CSng,CDbl関数で変換する(決まった型の数値となる)
それぞれの関数の使い方について紹介していきます。
文字列を数値に変換する方法 (Val関数)
Sub StrConvertToVal()
'''Val関数で文字列を数値に変換する
Const STR_INT_NUM As String = "123"
Const STR_SNG_NUM As String = "4.56"
Dim intNum As Integer
Dim sngNum As Single
intNum = Val(STR_INT_NUM)
sngNum = Val(STR_SNG_NUM)
Debug.Print TypeName(intNum) 'Integer
Debug.Print TypeName(sngNum) 'Single
End Sub
このようにVal関数で変換すると、Integer型やSingle型の変数に代入することができます。
数値以外を含んでいた時の挙動(Val関数)
Sub StrConvertToVal2()
'''Val関数で文字列を数値に変換する
Const STR_INT_NUM1 As String = "$123"
Const STR_INT_NUM2 As String = "12$3"
Const STR_INT_NUM3 As String = "123円"
Debug.Print Val(STR_INT_NUM1) '0
Debug.Print Val(STR_INT_NUM2) '12
Debug.Print Val(STR_INT_NUM3) '123
End Sub
文字列が数値以外を含んでいる場合はVal関数は数値以外に出会うまでの数値を返します。
そのため12$3などを入れると12が返されるため、誤動作をさせないように注意しましょう。
文字列を数値に変換する方法(CInt,CLng,CSng,CDbl関数)
これら4つの関数もVal関数と同じく文字列を数値に変換する関数です。
Val関数と異なるのは、返される数値の型が固定される点です。
Sub StrConvertToIntLngSngDbl()
'''Val関数で文字列を数値に変換する
Const STR_INT As String = "123"
Debug.Print TypeName(CInt(STR_INT)) 'Integer
Debug.Print TypeName(CLng(STR_INT)) 'Long
Debug.Print TypeName(CSng(STR_INT)) 'Single
Debug.Print TypeName(CDbl(STR_INT)) 'Double
End Sub
このように変換前が同じ文字列であっても、各関数が返す型は異なるものとなります。
厳密な計算が要求されるときはVal関数ではなく、これら4つの関数を使用するのがおすすめです。
数値以外を含んでいた時の挙動(CInt,CLng,CSng,CDbl関数)
Sub StrConvertToIntLngSngDbl2()
'''Val関数で文字列を数値に変換する
Const STR_INT_NUM1 As String = "$123"
Const STR_INT_NUM2 As String = "12$3"
Const STR_INT_NUM3 As String = "123円"
Debug.Print CInt(STR_INT_NUM1) 'エラーとなる
Debug.Print CInt(STR_INT_NUM2) 'エラーとなる
Debug.Print CInt(STR_INT_NUM3) 'エラーとなる
End Sub
Val関数とは異なり、文字列が数値以外を含んでいる場合はエラーが発生します。
誤った値が入った場合はエラーで止まるため、やはり厳密に計算したいときはVal関数でなく、これら4つの関数を使用するのがおすすめです。