HOME > 即効テクニック > Excel VBA > 関数関連のテクニック > 文字列の中から数値として認識できる部分を返す (Val関数)

文字列の中から数値として認識できる部分を返す (Val関数)|Excel VBA

関数関連のテクニック

文字列の中から数値として認識できる部分を返す (Val関数)

(Excel 2000/2002/2003/2007/2010/2013)

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では全角数字も数値として認識していましたが、以降のバージョンでは認識されないので注意してください。