Val関数:文字列となった数字を数値として取得する
VBAのVAL関数は、文字列から数値を抽出するために使用される関数です。文字列の先頭から数値部分を読み取り、その数値を返します。例えば、文字列”123.45abc”の場合、VAL関数は123.45を返します。
*表記方法:数値 = Val(文字列)
例)Cells(1, 2) = Val(Cells(1, 2))
<注意>
- 数字以外の文字列が出た時点で読み込み終了:
例)Val(”1個”):1を取得して個で読み込み終了。1が返される - 数字の前に数字以外がある場合、数字に変換されない:
例)Val(”平成5年”):平が出た時点で読み込み終了。5は返されないで0が返される - 小数点の「.」やスペースは無視して読み込みが継続:
例)Val(”123456.7 8”)「小数点やスペース」は無視されるため123456.78と返される - 半角数値のみ変換される。全角数値は変換
⇒全角数値を数値に変換する場合:全角数値を半角に変換後、数値に変換する
⇒参考)文字列の全角半角の変換にはStrConv関数を利用 - 活用)5gなど後ろに数値以外の合計を計算する場合、Vaⅼ関数が有効
注意点として、VAL関数は文字列中の空白やタブ文字を無視しますが、数値以外の文字の後に数値が続く場合は、それ以降の文字列は無視されます。また、小数点表記の場合は、ロケール設定に従い、小数点またはカンマが使用されます。
補足として、Str関数は、引数で指定された数値を文字列に変換する関数です。変換された文字列は、指数表記または小数点表記のどちらかになります。
また、文字列となっている数値はそのままでは計算ができません。そこで数値に変換します。
Val関数で該当列の文字列となった数字を数値に変換
Sub 該当列を数値に変換する()
Dim i As Long
For i = 2 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Cells(i, 2) = Val(Cells(i, 1))
Next i
MsgBox "完了"
End Sub
選択した範囲の表をVal関数で 文字列となった数字を数値に変換
Sub 指定範囲の数値変換()
Dim R As Long
Dim C As Long
Dim ActCell As Range
Range("B1").CurrentRegion.Select
For R = 0 To Selection.Rows.Count - 1
For C = 0 To Selection.Columns.Count - 1
Set ActCell = ActiveCell.Offset(R, C)
ActCell = Val(ActCell)
Next
Next
MsgBox "完了"
End Sub
解説
- 変数R:行数をカウント
- 変数C:列数をカウント
- 内側のループは選択した列の最終列まで列方向(右)に進む
- 最終列までいくと外側のループに行き行方向(下)に一つ進む
- 内側のループに進み最終列まで列方向(右)に進む
該当列を文字から数値へ変換
Sub 該当列を文字から数値へ変換()
With Range("A:A", "L:L")
.NumberFormatLocal = "G/標準"
.Value = .Value
End With
MsgBox "完了"
End Sub
数値が文字列として保存されているを列単位で数値に変換
*列を選んで区切り位置(TextToColumns)を設定
Sub 列単位で数値変換()
Dim colcnt As Integer
colcnt = 2
While Cells(1, colcnt) <> ""
Columns(colcnt).TextToColumns Comma:=True
colcnt = colcnt + 1
Wend
MsgBox "完了"
End Sub
参考)文字から数値へ
*有効な場合のみ利用
Sub 文字から数値へ()
Dim seru
For Each seru In ActiveSheet.UsedRange
seru.Value = seru.Value * 1
Next
MsgBox "完了"
End Sub
参考
CInt
関:文字列を整数に変換できます。ただし、変換先が整数である必要があります。CLng
関数:文字列を長整数に変換できます。ただし、変換先が長整数である必要があります。CDbl
関数:文字列を倍精度浮動小数点数に変換できます。CDec
関数:文字列を通貨値に変換できます。
コメント