Excel VBA 逆引き集 | 数値変換

Excel VBA
スポンサーリンク

数値変換

Excelのセルには「文字列としての数字」「数値」「空白や文字が混ざった数字」などが入りがちです。これを正しく 数値に変換 するのは、データ処理の基本です。初心者向けに、コード例とテンプレートをかみ砕いて説明します。


基本の考え方

  • Val関数: 文字列の先頭から数値を読み取る。
  • CInt / CLng / CDbl: 型変換関数。整数や倍精度に変換。
  • IsNumeric: 数値かどうか判定。
  • エラー対策: 数値でない場合は0や空白に置き換える。

テンプレ1:文字列を数値に変換(Val)

Sub Convert_Val()
    Dim s As String
    s = "123ABC"

    Dim num As Double
    num = Val(s) ' 先頭の数字だけ数値化

    MsgBox num ' → 123
End Sub
VB
  • ポイント: "123ABC"123。文字が混ざっていても先頭の数字部分だけ変換。

テンプレ2:型変換関数で数値化

Sub Convert_CInt_CLng_CDbl()
    Dim s As String
    s = "45.67"

    Dim i As Integer
    Dim l As Long
    Dim d As Double

    i = CInt(s)   ' 四捨五入して整数に
    l = CLng(s)   ' 長整数に
    d = CDbl(s)   ' 倍精度に

    MsgBox "CInt=" & i & vbCrLf & "CLng=" & l & vbCrLf & "CDbl=" & d
End Sub
VB
  • ポイント:
    • CInt("45.67") → 46
    • CLng("45.67") → 46
    • CDbl("45.67") → 45.67

テンプレ3:数値判定(IsNumeric)

Sub Convert_IsNumeric()
    Dim s As String
    s = "ABC"

    If IsNumeric(s) Then
        MsgBox "数値です"
    Else
        MsgBox "数値ではありません"
    End If
End Sub
VB
  • ポイント: 数値かどうかを判定してから変換すると安全。

テンプレ4:シートの値を数値に変換して書き戻す

Sub Convert_RangeToNumber()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim r As Long, v As Variant
    For r = 2 To lastRow
        v = ws.Cells(r, "A").Value
        If IsNumeric(v) Then
            ws.Cells(r, "A").Value = CDbl(v) ' 数値に変換して書き戻す
        End If
    Next r
End Sub
VB
  • ポイント: 文字列として保存されている数字を「数値」に変換できる。

テンプレ5:空白や文字混じりを安全に数値化

Function SafeToNumber(ByVal s As Variant) As Double
    If IsNumeric(s) Then
        SafeToNumber = CDbl(s)
    Else
        SafeToNumber = Val(s) ' 先頭の数字だけ拾う
    End If
End Function

Sub Convert_Safe()
    Dim arr As Variant
    arr = Array("123", "45.6円", "ABC", " 789 ")

    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i), "→", SafeToNumber(arr(i))
    Next i
End Sub
VB
  • 結果:
    • "123" → 123
    • "45.6円" → 45.6
    • "ABC" → 0
    • " 789 " → 789

例題で練習

'例1:Valで文字列から数値を取り出す
Sub Example_Val()
    Convert_Val
End Sub

'例2:型変換関数で数値化
Sub Example_CType()
    Convert_CInt_CLng_CDbl
End Sub

'例3:数値判定して安全に変換
Sub Example_IsNumeric()
    Convert_IsNumeric
End Sub

'例4:シートのA列を数値に変換
Sub Example_Range()
    Convert_RangeToNumber
End Sub

'例5:SafeToNumber関数で混在データを数値化
Sub Example_Safe()
    Convert_Safe
End Sub
VB

初心者向けポイント

  • Valは便利だが注意: 文字が混ざっていても先頭の数字だけ拾う。
  • 型変換関数は厳密: CIntCLngは四捨五入される。
  • IsNumericで安全確認: 数値でない場合は変換しない。
  • 日本語データでは「円」「個」などが混ざる: Valで先頭の数字だけ取り出すと便利。
  • 正規化関数を作る: SafeToNumber のようにまとめておくと再利用できる。
タイトルとURLをコピーしました