【VBA】文字列を数値、数値を文字列に変換する方法

【VBA】文字列を数値、数値を文字列に変換する方法

公開: 更新:


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ですが、メモリ使用量を抑えるためにも適切な型変換を意識しましょう。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

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」を参照設定すれば、多様な文字列パターンを一括で置換可能です。国際対応を意識するなら、ロケールごとに異なる通貨記号や小数点記号にも注意してください。

おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する