例文を使って繰り返し業務を時短

【マクロ・VBA】指定した範囲の文字列を数値に変換する

エクセル、マクロ、VBAで指定した範囲の文字列を数値に変換する方法 VBA

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関数:文字列を通貨値に変換できます。

コメント

タイトルとURLをコピーしました