VBAでデータを扱っていると、次のようなことはありませんか?
- 文字列の数字を数値へ変換したい
- 計算前に数値型へ変換したい
- 文字列から数字だけ取得したい
このような場合は、Val関数を使うことで解決できます。
文字列から数値を取り出して数値型へ変換できる便利な関数です。
この記事では、Val関数の基本から実務での活用方法まで分かりやすく解説します。
この記事でできること
- 文字列を数値へ変換できる
- 文字列から数値だけ取得できる
- 計算処理で活用できる
Val関数とは?
Val関数は、文字列の先頭から数値として解釈できる部分を取り出して数値へ変換する関数です。
例えば、
"123"
を変換すると、
123
という数値になります。
基本:Val関数の使い方
基本構文はこちらです。
Val(文字列)
基本例
MsgBox Val("123")
→ 123
小数も変換できる
MsgBox Val("123.45")
→ 123.45
文字が含まれていても変換できる
先頭から数値部分のみ取得します。
MsgBox Val("123ABC")
→ 123
先頭が文字の場合
MsgBox Val("ABC123")
→ 0
先頭が数値でないため0になります。
セルの値を数値へ変換する
Dim num As Double
num = Val(Range("A1").Value)
MsgBox num
計算処理で使う
Dim total As Double
total = Val("100") + Val("200")
MsgBox total
→ 300
通貨記号付きデータを変換する
MsgBox Val("1000円")
→ 1000
マイナス値も変換できる
MsgBox Val("-500")
→ -500
ValとCInt・CDblの違い
| 関数 | 特徴 |
|---|---|
| Val | 数値部分のみ取得 |
| CInt | 整数へ変換 |
| CDbl | Double型へ変換 |
Valの場合
Val("123ABC")
→ 123
CIntの場合
CInt("123ABC")
→ エラー
実務での活用例
- CSVデータ取込
- 入力値の数値変換
- 単位付きデータ処理
- 数値計算前の変換
データ加工では非常によく使われます。
注意点
① 先頭が文字なら0になる
Val("ABC123")
→ 0
② カンマ付き数値は注意
Val("1,000")
→ 1
カンマで変換が終了します。
対処方法
Val(Replace("1,000", ",", ""))
→ 1000
③ 日付変換には向かない
日付にはDateValue関数などを使用してください。
安全な書き方(おすすめ)
Dim txt As String
txt = Range("A1").Value
If txt <> "" Then
MsgBox Val(txt)
End If
よくあるエラーと対処法
① 思った値にならない
先頭文字やカンマが含まれていないか確認してください。
② 小数点が取得できない
文字列の形式を確認してください。
③ 計算結果がおかしい
Val変換後のデータ型を確認してください。
④ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- Valは文字列を数値へ変換する関数
- 先頭から数値部分のみ取得する
- CSVや入力データ処理で便利
- CIntやCDblとの違いも理解しておく
Val関数を使いこなせるようになると、文字列データの数値変換が簡単になります。
実務でも使用頻度が高い関数なので、ぜひマスターしておきましょう。

コメント