『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】Val関数

【VBA】Val関数

VBAValは文字列から数値を抜き出す関数です。もう少し正確に言うと、文字列を先頭から読み込んで、数字以外の文字を見つけたら読み込みを止めて、それ以前の数字をすべて表示します。だから先頭に数字以外の文字があったら、いきなり読込をストップして「 0 」を返してきます。この関数がどの文字を数字と判断するかについては、色々とうるさい決まりごとがあるので、サンプルコードを走らせながら具体例を見てみましょう。
 
次のサンプルコードでは、配列に色々な文字列を放り込んで、それをすべてVal関数で変換しています。

'[VBA] Val関数の動作テスト

Sub Val_Test()

  Dim mystr(6) As String

  mystr(0) = "FIFA World Cup 2018 Russia"  '先頭が文字
  mystr(1) = "2018 FIFA ワールドカップ ロシア大会"  '先頭が半角数字
  mystr(2) = "3.141159263"  '小数点
  mystr(3) = "1,620,580 円"  'カンマ
  mystr(4) = "\3800"  '\マーク
  mystr(5) = "12345"  '全角数字
  mystr(6) = "2018 8 28"  'スペース

  'すべての配列要素をValで変換
  For i = 0 To 6
    Debug.Print mystr(i) & " → " & Val(mystr(i))
  Next

End Sub

'FIFA World Cup 2018 Russia → 0
'2018 FIFA ワールドカップ ロシア大会 → 2018
'3.141159263 → 3.141159263
'1,620,580 円 → 1
'\3800 → 0
'12345 → 0
'2018 8 28 → 2018828

Val には次のような変換ルールがあります。
 
(1) 文字列の先頭に数字以外の文字があると 0 を返す。
(2) 途中に数字以外の文字があると、その前の数字を返す。
(3) 小数点は数値として認識される。
(4) カンマ (,) は数値として認識されない。
(5) \マークは数値として認識されない。
(6) 全角数字は数値として認識されない。
(7) スペースは読み飛ばされる(詰めて表示される)。

他にも色々ありますが、大体これぐらいを覚えておけば実用上は問題ないです。「全角数字を数値に変えたい」というケースが頻繁にありますが、それは Val関数ではなくて、CInt関数を使います。補足として下に CInt関数のサンプルコードを載せておきます。

'[VBA] 全角数字を数値型に換えるプロシージャ

Sub Cint_Test()

  Dim mystr As String

  '全角数字
  mystr = "12345"

  '全角数字を数値に変換
  Debug.Print CInt(mystr)

End Sub

Cint_Test() を実行すると全角数字「12345」が半角数字「12345」に変換されます。
え? 今日はこばとの無駄なおしゃべりがなくて珍しい?
… 二日酔いで、おしゃべりする気分じゃないんですよ。う~頭痛い。

コメント

  1. あとりえこばと より:

    AIがVBAのValについて解説します

    [ChatGPT] VBAのVal関数は、文字列を数値に変換するために使用される関数です。この関数は、文字列の先頭から数値として解釈できる部分を抽出し、その値を返します。以下に、Val関数の基本的な使い方と動作の例を示します。

    基本的な構文:
     Val(expression)
     
    expressionは、数値に変換する文字列です。
     
    Val関数の動作:
    1.expressionの先頭から始まる連続した数値文字列(0-9の数字とドット「.」)を抽出します。
    2.抽出された数値文字列を数値に変換します。
    3.変換された数値を返します。もし、文字列の先頭が数値文字列でない場合や、数値文字列が存在しない場合は、0を返します。
     
    以下に、Val関数の具体的な例を示します。

    Sub ValExample()
        Dim str As String
        Dim result As Double
        
        str = "123.45"
        result = Val(str)
        MsgBox result  ' 結果: 123.45
        
        str = "ABC123"
        result = Val(str)
        MsgBox result  ' 結果: 0
        
        str = "1,000.25"
        result = Val(str)
        MsgBox result  ' 結果: 1
        
        str = "Hello 123 World"
        result = Val(str)
        MsgBox result  ' 結果: 0
    End Sub

    この例では、Val関数を使用して異なる文字列を数値に変換しています。最初の例では、文字列”123.45″が数値123.45に変換されています。2番目の例では、文字列”ABC123″は数値に変換できないため、結果は0になります。3番目の例では、文字列”1,000.25″の変換結果は数値の1となります。最後の例では、数値文字列が存在しないため、結果は0になります。注意点として、Val関数は整数または倍精度浮動小数点数(Double)を返すため、変数の型を適切に宣言する必要があります。