文字列の中から数値として認識できる部分を返す (Val関数)|Excel VBA |
Val関数は、文字列の中の数値を適切なデータ型に変換して返します。
文字列を先頭から見ていき、「数値と認識できる部分」までを返します。
構文 Val(String)
設定項目 | 内容 |
---|---|
String | 数値に変換する文字列を指定[省略不可] |
円記号(\)やカンマ(,) など、通常は数値の一部とみなされる記号や文字も数値とみなしません。
ただし、小数点を表すピリオド(.)と、基数を示すプリフィックス&O(8進数)や&H(16進数)は数値として認識します。
引数の文字列に含まれるスペース、タブ、改行コードは無視します。
次のサンプルでは、Val関数で文字列がどのように変換されるか確認できます。
Sub Sample()
Dim myStr(10) As String
Dim i As Long
Dim myMsg As String
myStr(0) = "鉄人28号"
myStr(1) = "\9,800"
myStr(2) = "9,800円"
myStr(3) = "800円"
myStr(4) = "1億人"
myStr(5) = "12,000"
myStr(6) = "123.45"
myStr(7) = "1/3"
myStr(8) = "123 456" & vbCrLf & "789"
myStr(9) = "&HFF"
myStr(10) = "&HFFFF"
For i = 0 To 10
myMsg = myMsg & myStr(i) & String(2, vbTab) & _
Val(myStr(i)) & String(2, vbCrLf)
Next i
MsgBox myMsg
End Sub
先頭が数値であるにもかかわらず「1億人」が「1」に変換されていないのは、先頭の「1」が全角になっているためです。Excel5.0/95 など、古いバージョンのVBAでは全角数字も数値として認識していましたが、以降のバージョンでは認識されないので注意してください。