文字列で表示されている数字を数値に変換するVBAを紹介します。
見た目は数字なのに、入力形式が文字列のため困ったことはありませんか。
山ほどあります!
気づかず、数式がエラーになることがよくあります。
職場からのヘルプでも、文字列と数値との違いのせいだったということがけっこうあります。またかぁって感じです。
数字の文字列を数値に変えると言っても、いろいろなパターンがありますのでそれを見ていきましょう。
数字の文字列を数値に変換するVBA
A列に文字列が入力されているものとします。
セルに上書きする
Sub 文字列を数値に1()
Dim e, i As Long
e = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To e
Cells(i, 1).Value = Cells(i, 1).Value
Next i
End Sub
Sub 文字列を数値に2()
Dim C As Range
Dim e As Long
e = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(e, 1)).Select
For Each C In Selection
C.Value = C.Value
Next C
End Sub
1と2は同じ内容です。
エラーは出ませんが、セルの書式設定が必要です。
文字列を数値に変換する関数を使用するVBA
Sub 文字列を数値に変換3()
Dim e, i As Long
e = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To e
If IsNumeric(Cells(i, 1)) = True Then
‘文字列が数値に変換できるのであれば
Cells(i, 1) = Val(Cells(i, 1))
End If
Next i
End Sub
対象の文字列が、数字に変換できない場合は「0」となるため、「数値に変換できるのであれば」という分岐を設けています。
また空白セルも「0」となるため、必要であれば「if cells(i,1) = “” Then」などと分岐します。
Val関数は文字列の先頭に数字が含まれていれば、そこまでの数字を数値型に変換できるので、使い方によってはとても便利な関数です。数値+文字列という文字列の配列が決まっているものの数値だけを抜きたい場合は、Left関数を使わなくてもVal関数のみで数値を抜くことができます。
選択したセル全ての文字列を数値に変換するVBA
Sub 文字列を数値に変換4()
Dim myRange As Range
Dim e As Long
e = Cells(Rows.Count, 1).End(xlUp).Row
Set myRange = Range(Cells(1, 1), Cells(e, 1))
myRange.Value = Evaluate(myRange.Address & “* 1”)
End Sub
このVBAを使うと、空白セルが「0」、スペースが「#VALUE!」となります。また、数字に変換できない場合も「#VALUE!」となります。
データ量が多くなると、このVBAの方がFor~Nextを使ったVBAより早いですが、数値以外は全てエラーになりなります。
また、全てのマクロにおいて全角数字は無効ですので、全角文字が含まれる場合は、Val関数とvbNarrow関数を組み合わせて使用して下さい。Val(vbNarrow(Cells(1, 1)))など。
使うマクロを考えて使用したいですね。
コメント