このページでは、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関数については下記のページにまとめた。

練習問題
アクティブシートのセルA1に下図の値が入力されている。この状態でプロシージャ「Test」を実行したところ、メッセージボックスに「9」と表示された。空欄【1】に当てはまる記述として正しいものはどれか。次の中から1つ選択しなさい。
Sub Test()
MsgBox 【 1 】
End Sub
- Val(Int(Range("A1").Value))
- Int(Val(Range("A1").Value))
- Val(Abs(Range("A1").Value))
- Abs(Val(Range("A1").Value))
正解を見る
コメント