【VBA】文字列(数字)を数値に置き換える

文字列で表示されている数字を数値に変換する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)))など。

使うマクロを考えて使用したいですね。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

子育てに奮闘しながらも、再びガッツリ走り込める日を夢見るフルタイム会社員。

コメント

コメントする

CAPTCHA


目次
閉じる