Val関数を使って文字列を数値に変換する
文字列を数値に変換するにはいくつか方法があります。
- Val関数(文字列の左から変換できるまでをDouble型に変換) Val関数がおすすめ!
- CDbl関数(数字文字列をDouble型に変換)
- CSng関数(数字文字列をSingle型に変換)
- CLng関数(数字文字列をLong型に変換)
- CInt関数(数字文字列をInteger型に変換)
- CDec関数(数字文字列をVariant型(10進数値)に変換)
いずれを利用しても同じような結果になります。ただし、括弧に書いた内容の制限があります。
その中でもVal関数がエラーになりにくく使いやすいです。
Val関数以外は文字列の中に数字以外が入っているとエラーになりますが、Val関数はエラーにならず、文字列の左端から数字以外の文字の直前までを変換します。
文字列から数値に変換するサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub StringToNumber() Dim v As Double v = Val("123") Debug.Print "[123]" & " → [" & v & "]" v = Val("123456789012345678901234567890") Debug.Print "[123456789012345678901234567890]" & " → [" & v & "]" v = Val("123,456.7890") Debug.Print "[123,456.7890]" & " → [" & v & "]" v = Val("-123") Debug.Print "[-123]" & " → [" & v & "]" v = Val("1234abcde") Debug.Print "[1234abcde]" & " → [" & v & "]" v = Val("12345 67890") Debug.Print "[12345 67890]" & " → [" & v & "]" v = Val("00000000123") Debug.Print "[00000000123]" & " → [" & v & "]" End Sub |
実行結果
1 2 3 4 5 6 7 |
[123] → [123] [123456789012345678901234567890] → [1.23456789012346E+29] [123,456.7890] → [123] [-123] → [-123] [1234abcde] → [1234] [12345 67890] → [1234567890] [00000000123] → [123] |
いくつかの文字列パターンを挙げていますが、いずれの場合もエラーにならず数字が数値に変換されます。
Val関数の特徴
Val関数は文字列の左端から数字と半角スペースとタブとドット(.)が続く間だけ数値に変換します。
そのため、円の金額表示で\文字が先頭についている場合は\を数値変換できずに0を返しますし、カンマ(,)もそこで変換が止まってしまいます。
なお、通貨用のCCur関数やDouble型用のCDbl関数は\文字もカンマ文字も数値の一部として解釈します。