数値変換
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")→ 46CLng("45.67")→ 46CDbl("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は便利だが注意: 文字が混ざっていても先頭の数字だけ拾う。
- 型変換関数は厳密:
CIntやCLngは四捨五入される。 - IsNumericで安全確認: 数値でない場合は変換しない。
- 日本語データでは「円」「個」などが混ざる:
Valで先頭の数字だけ取り出すと便利。 - 正規化関数を作る:
SafeToNumberのようにまとめておくと再利用できる。
