VBAで文字列(string)を数値に変換する方法
「VBAで文字列を数値に変換する方法」に関して、以下を解説します
- CInt関数で整数型(integer)に変換
- CLng関数で長整数型(Long)に変換
- CDbl関数で倍精度浮動小数点型(Double)に変換
- CSng関数で単精度浮動小数点型(Single)に変換
- Val関数で数値部分のみ抽出して変換
CInt関数で整数型(integer)に変換
CInt関数は文字列を整数型(Integer)に変換するためのVBA組み込み関数です。変換可能な範囲は-32,768から32,767までの数値に限定されており、小数点以下は四捨五入されるため、切り捨てや切り上げが必要な場合は別の処理を検討する必要があります。
# サンプル
Sub CIntExample()
Dim strNum As String
Dim intNum As Integer
strNum = "123"
intNum = CInt(strNum)
Debug.Print "変換結果: " & intNum
Debug.Print "データ型: " & TypeName(intNum)
End Sub
# 出力結果
変換結果: 123
データ型: Integer
CInt関数は変換不可能な文字列が入力された場合、ランタイムエラー「型が一致しません」が発生するため、事前にIsNumeric関数で数値化(数値に変換)できるかチェックすると安全です。また、範囲外の数値を扱う際もエラーが発生する点に留意してください。
CLng関数で長整数型(Long)に変換
CLng関数は文字列を長整数型(Long)に変換するVBA関数で、-2,147,483,648から2,147,483,647の範囲を扱います。CInt関数と同様に小数点以下は四捨五入され、数値に変換できない文字列や範囲外の場合にはランタイムエラーが発生します。
# サンプル
Sub CLngExample()
Dim strLargeNum As String
Dim longNum As Long
strLargeNum = "123456"
longNum = CLng(strLargeNum)
Debug.Print "変換結果: " & longNum
Debug.Print "データ型: " & TypeName(longNum)
' CIntでは扱えない範囲
strLargeNum = "100000"
longNum = CLng(strLargeNum)
Debug.Print "大きな数値の変換結果: " & longNum
End Sub
# 出力結果
変換結果: 123456
データ型: Long
大きな数値の変換結果: 100000
CLng関数は大きな整数値を扱うデータ処理やExcel(エクセル)のセル参照などで重要です。VBAのデフォルト数値型はDoubleですが、メモリ使用量を抑えるためにも適切な型変換を意識しましょう。
CDbl関数で倍精度浮動小数点型(Double)に変換
CDbl関数は文字列を倍精度浮動小数点型(Double)に変換し、小数点や非常に大きな数値を高精度で扱えます。約15桁の精度を持ち、小数点以下の値をそのまま保持するため、科学計算や財務計算など精度が重要な場面で使用されます。
# サンプル
Sub CDblExample()
Dim strDecimal As String
Dim dblNum As Double
strDecimal = "123.456"
dblNum = CDbl(strDecimal)
Debug.Print "変換結果: " & dblNum
Debug.Print "データ型: " & TypeName(dblNum)
' 科学的表記法
strDecimal = "1.23E+10"
dblNum = CDbl(strDecimal)
Debug.Print "科学的表記法の変換結果: " & dblNum
End Sub
# 出力結果
変換結果: 123.456
データ型: Double
科学的表記法の変換結果: 12300000000
CDbl関数はロケール設定に依存するため、小数点や桁区切りが異なる言語環境で注意が必要です。Excelを多言語環境で使用する場合は、国や地域による違いを考慮した設計を意識するようにしましょう。
CSng関数で単精度浮動小数点型(Single)に変換
CSng関数は文字列を単精度浮動小数点型(Single)に変換し、メモリ使用量を抑えつつ小数点を扱いたい場合に適しています。約7桁の精度を持ち、-3.402823E+38から3.402823E+38までの範囲を扱えます。
# サンプル
Sub CSngExample()
Dim strFloat As String
Dim sngNum As Single
strFloat = "123.45"
sngNum = CSng(strFloat)
Debug.Print "変換結果: " & sngNum
Debug.Print "データ型: " & TypeName(sngNum)
' 精度の確認
strFloat = "123.4567890123"
sngNum = CSng(strFloat)
Debug.Print "精度制限での変換結果: " & sngNum
End Sub
# 出力結果
変換結果: 123.45
データ型: Single
精度制限での変換結果: 123.4568
CSng関数は精度がDoubleより低いですが、その代わりにメモリ使用量が少ない点がメリットです。しかし、金融計算など厳密な精度が必要な場合はDouble型が推奨されているので、使い分けられるようにした方が良いでしょう。
Val関数で数値部分のみ抽出して変換
Val関数は文字列の先頭から、数値として解釈できる部分のみを抽出しDouble型に変換します。文字列の最初から数字や小数点、符号を読み取り、それ以外の文字に当たると変換を停止する仕組みです。
# サンプル
Sub ValExample()
Dim mixedString As String
Dim numValue As Double
mixedString = "123.45円"
numValue = Val(mixedString)
Debug.Print "「" & mixedString & "」の変換結果: " & numValue
mixedString = "価格: 500円"
numValue = Val(mixedString)
Debug.Print "「" & mixedString & "」の変換結果: " & numValue
mixedString = "100-200"
numValue = Val(mixedString)
Debug.Print "「" & mixedString & "」の変換結果: " & numValue
End Sub
# 出力結果
「123.45円」の変換結果: 123.45
「価格: 500円」の変換結果: 0
「100-200」の変換結果: 100
Val関数は常にエラーを返さず、数値部分がなければ0を返すため、エラーハンドリングが不要です。ただし、想定外の文字列から0が返る可能性があるので注意が必要です。
VBAで通貨や特殊記号を含む文字列の数字を数値に変換する方法
通貨記号や特殊記号を含む文字列の数字を数値に変換する方法として、文字列操作関数と変換関数を組み合わせるケースを解説します。
ビジネスシーンでは「¥1,000」や「$100.50」のような通貨表記を数値化する作業が頻繁に発生します。標準的な変換関数では通貨記号やカンマをそのまま扱えないため、Replace関数やSubstitute関数などで不要な文字を除去してから数値変換すると便利です。
# サンプル
Sub ConvertCurrencyToNumber()
Dim currencyStr As String
Dim cleanStr As String
Dim numValue As Double
currencyStr = "¥12,345"
cleanStr = Replace(Replace(currencyStr, "¥", ""), ",", "")
numValue = CDbl(cleanStr)
Debug.Print currencyStr & " → " & numValue
currencyStr = "$1,234.56"
cleanStr = Replace(Replace(currencyStr, "$", ""), ",", "")
numValue = CDbl(cleanStr)
Debug.Print currencyStr & " → " & numValue
currencyStr = "1,500kg"
cleanStr = Application.WorksheetFunction.Substitute(currencyStr, "kg", "")
cleanStr = Replace(cleanStr, ",", "")
numValue = CDbl(cleanStr)
Debug.Print currencyStr & " → " & numValue
End Sub
# 出力結果
¥12,345 → 12345
$1,234.56 → 1234.56
1,500kg → 1500
より複雑な入力形式に対応する場合は、正規表現を使う方法もあります。VBAでは「Microsoft VBScript Regular Expressions」を参照設定すれば、多様な文字列パターンを一括で置換可能です。国際対応を意識するなら、ロケールごとに異なる通貨記号や小数点記号にも注意してください。
VBAで数値を文字列(string)に変換する方法
「VBAで数値を文字列に変換する方法」として、主に以下の手段があります。
- CStr関数による変換
- Str関数による変換
- Format関数による書式付き変換
- 文字列連結演算子(&)による自動変換
CStr関数による変換
CStr関数は数値から文字列に変換するVBAの組み込み関数です。整数型や浮動小数点型など、あらゆる数値を自動的に文字列へ変換し、システムのロケール設定に応じた表記が適用されます。
# サンプル
Sub CStrExample()
Dim intValue As Integer
Dim dblValue As Double
Dim strFromInt As String
Dim strFromDbl As String
intValue = 12345
dblValue = 123.45
strFromInt = CStr(intValue)
Debug.Print "整数変換結果: " & strFromInt & ", 型: " & TypeName(strFromInt)
strFromDbl = CStr(dblValue)
Debug.Print "小数変換結果: " & strFromDbl & ", 型: " & TypeName(strFromDbl)
End Sub
# 出力結果
整数変換結果: 12345, 型: String
小数変換結果: 123.45, 型: String
大きな数値や小さな数値は科学的表記法になる場合がある為、厳密な表示形式が必要な場合はFormat関数などでカスタマイズする必要があります。
Str関数による変換
Str関数はBASIC由来の仕様を持ち、正の数値に先頭スペースが付加される点がCStr関数との違いです。レガシーコードや固定幅フォーマットなど特定用途で使用されるケースがあります。
# サンプル
Sub StrExample()
Dim positiveInt As Integer
Dim negativeInt As Integer
Dim positiveResult As String
Dim negativeResult As String
positiveInt = 12345
negativeInt = -12345
positiveResult = Str(positiveInt)
Debug.Print "正の数値変換結果:「" & positiveResult & "」, 長さ: " & Len(positiveResult)
negativeResult = Str(negativeInt)
Debug.Print "負の数値変換結果:「" & negativeResult & "」, 長さ: " & Len(negativeResult)
Debug.Print "CStr比較(正):「" & CStr(positiveInt) & "」, 長さ: " & Len(CStr(positiveInt))
End Sub
# 出力結果
正の数値変換結果:「 12345」, 長さ: 6
負の数値変換結果:「-12345」, 長さ: 6
CStr比較(正):「12345」, 長さ: 5
先頭スペースを除去したい場合はTrim関数を活用するか、最初からCStr関数を使用する方が良いでしょう。
Format関数による書式付き変換
Format関数は数値を文字列に変換しつつ、小数点以下桁数や通貨記号、パーセント表記など多彩な書式設定が可能です。レポート出力やユーザー画面表示などで重宝しますが、他の関数より処理が遅い点に注意してください。
# サンプル
Sub FormatExample()
Dim numValue As Double
Dim formattedStr As String
numValue = 12345.6789
formattedStr = Format(numValue, "0.00")
Debug.Print "小数点2桁: " & formattedStr
formattedStr = Format(numValue, "#,##0.00")
Debug.Print "桁区切り: " & formattedStr
formattedStr = Format(numValue, "Currency")
Debug.Print "通貨形式: " & formattedStr
formattedStr = Format(numValue / 100, "Percent")
Debug.Print "パーセント形式: " & formattedStr
formattedStr = Format(numValue, "Scientific")
Debug.Print "科学的表記法: " & formattedStr
End Sub
# 出力結果
小数点2桁: 12345.68
桁区切り: 12,345.68
通貨形式: ¥12,345.68
パーセント形式: 123.46%
科学的表記法: 1.23E+04
Format関数の書式指定は柔軟ですが、処理負荷が高くなるため大量データを処理する場合は注意しましょう。
文字列連結演算子(&)による自動変換
VBAでは&を使って数値と文字列を連結すると、自動的に数値が文字列化されます。明示的にCStrを呼び出す必要がなく、デバッグ出力やメッセージ表示などで手軽に使えます。
# サンプル
Sub ConcatenationExample()
Dim intValue As Integer
Dim dblValue As Double
Dim resultStr As String
intValue = 12345
dblValue = 123.45
resultStr = "整数値: " & intValue
Debug.Print resultStr
resultStr = "小数値: " & dblValue
Debug.Print resultStr
resultStr = "ID: " & intValue & ", 金額: " & dblValue
Debug.Print resultStr
Debug.Print "計算結果: " & (intValue + dblValue)
End Sub
# 出力結果
整数値: 12345
小数値: 123.45
ID: 12345, 金額: 123.45
計算結果: 12468.45
書式の細かい制御が必要な場合はFormat関数を使用してください。大量の文字連結時はStringBuilder相当の実装を検討することでパフォーマンスを高められます。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- 【Python】絶対パスでインポート(import)する方法
- 【Python】int(数値)とstring(文字列)を変換する方法
- 【Python 】キー入力でループを抜ける処理の実装方法
- 【Excel】文字列を数値に変換する方法を解説