Val関数のポイント

このページでは、Val関数の基本的な使い方と、エキスパート試験で問われそうなポイントをまとめた。

スポンサーリンク

基本的な使い方

Val関数は、文字列から数値の部分のみを取り出して返す。

【書式】
Val(文字列)

次のプロシージャはVal関数の使用例だ。文字列「100人」から数値と判断できる部分を取り出し、メッセージボックスに表示する。

Sub Test()
    MsgBox Val("100人")
End Sub

Val関数は、文字列の左側から数値として扱える部分までを返す。よって次のプロシージャを実行すると「2019」と表示される。「年」は数値に変換できないので、Val関数はその手前までを取得する。

Sub Test()
    MsgBox Val("2019年2月14日")
End Sub

Val関数を使うと、Excelのセルに入力された数値から単位を取り除き、数値のみを合算することができる。次のプロシージャは、セルA1~A3の値を合算してメッセージボックスに表示する。

Sub Test()
    Dim i As Integer, res As Long
    For i = 1 To 3
        res = res + Val(Cells(i, 1))
    Next
    MsgBox res
End Sub

注意が必要なケース

数値に変換できない場合

文字列の先頭が数値として扱えない場合、Val関数は数値の0を返す。

Sub Test1()
    Debug.Print Val("A3")
End Sub

ピリオドの扱い方

文字列にピリオドが含まれる場合は気をつけたい。次のプロシージャの実行結果はどうなるだろうか。

Sub Test()
    MsgBox Val("2019.2.14")
End Sub

実行するとメッセージボックスに「2019.2」と表示される。最初のピリオドは、小数点を表すものと認識される。2つ目のピリオドは文字として認識される。よって、Val関数は2つ目のピリオドの手前までを取得して返す。

カンマの扱い方

Val関数は、カンマを文字として扱う。よって次のプロシージャを実行すると「1」と表示される。

Sub Test()
    MsgBox Val("1,000円")
End Sub

もうひとつ例をあげておく。セルA1~A3に下記の値が入力されている。このとき次のプロシージャ「Test」を実行するとどうなるだろうか?

Sub Test()
    Dim i As Integer, res As Long
    For i = 1 To 3
        res = res + Val(Cells(i, 1))
    Next
    MsgBox res
End Sub

……

……

プロシージャを実行すると、メッセージボックスに「6」と表示される。カンマの手前までをVal関数で取得して、その値を合算するためだ。

なお、Val関数の実行前にカンマを取り除くことで、数値のみを合算することができる。カンマを取り除くにはReplace関数を使う。

Sub Test()
    Dim i As Integer, res As Long
    Dim temp As String
    For i = 1 To 3
        temp = Replace(Cells(i, 1), ",", "")
        res = res + Val(temp)
    Next
    MsgBox res
End Sub

Replace関数については下記のページにまとめた。

Replace関数のポイント
Replace関数は、いろいろと応用がきく関数だ。実務上でもよく使うと思う。このページでは、Replace関数の基本的な使い方とVBAエキスパート試験の...

練習問題

アクティブシートのセルA1に下図の値が入力されている。この状態でプロシージャ「Test」を実行したところ、メッセージボックスに「9」と表示された。空欄【1】に当てはまる記述として正しいものはどれか。次の中から1つ選択しなさい。

Sub Test()
    MsgBox 【 1 】
End Sub

  1. Val(Int(Range("A1").Value))
  2. Int(Val(Range("A1").Value))
  3. Val(Abs(Range("A1").Value))
  4. Abs(Val(Range("A1").Value))

正解を見る

2

コメント