VBA で文字列を数値に変換する

Iqra Hasnain 2022年5月26日
VBA で文字列を数値に変換する

この記事では、VBA Excel で文字列を数値に変換する方法について説明します。ステップバイステップのガイドと私たちの理解のための多くの例があります。

VBA で文字列を数値に変換する

VBA コードでは、テキストとして保存された数値を実数に変換することが必須です。多くの変換オプションがあります。

文字列は、Byte、Integer、Long、Single、Double、Currency、および Decimal データ型の数値に変換できます。各変換について、例を使用して詳細に説明します。

VBA で文字列をバイトに変換する

次のコードを使用すると、文字列をいくつかのバイトデータ型に簡単に変換できます。

# vba
byte = CByte(str)

CByte() 関数を使用して、この変換を実行できます。上記のステートメントには、CByte() と文字列の 2つの項目があります。

CByte() 関数は、文字列を強制的にバイトタイプに変更します。CByte() は、国際的に認識されている文字列からバイトデータ型への変換を実行するためによく使用されます。

簡単に言うと、CByte() は通常、コンピュータの場所に応じて、特徴的な 10 進数/1000 進数の区切り文字と多くの通貨オプションを区別します。バイトデータ型が保持できる範囲は 0〜225 です。文字列がこの範囲内にない場合、エラーが発生します。

これは、文字列をバイトに変換するための引数として convertStr があるマクロの例です。

# vba
Function convertStr(newStr As Variant)

    MsgBox (CByte(newStr))

End Function

Sub newFunc()
convertStr ("12")
End Sub

出力:

文字列を VBA のバイトとして数値に変換する

VBA で文字列を整数に変換する

次のステートメントを使用すると、文字列を整数データ型の数値に簡単に変換できます。この関数の構文を以下に示します。

# vba
CInt(newStr)

文字列を整数データ型に変更するには、Clnt() 関数を使用することをお勧めします。この関数は、文字列を整数データ型に強制的に変更します。

文字列が分数を保持している場合、この関数はそれを整数に変換します。分数が正確に 0.4 の場合、この関数はそれを最も近い偶数に変更します。

例えば:

# vba
0.4 will become 0.
1.6 and 2.4 both will become 2.
3.7 and 4.3 will become 4

Clnt() は、国際的に認識されている文字列を整数データ型に変換するためによく使用されます。簡単に言うと、Clnt() は通常、コンピュータの場所に依存する特徴的な小数/千の区切り文字と多くの通貨オプションを区別します。

整数データ型が数値を保持できる範囲は、-32,768〜32,767 です。文字列がこの範囲内にない場合、エラーが発生します。

例を見て、以下に示すように CInt() 関数を使用してみましょう。この例では、次に示すように、文字列を整数に変更するための引数として newStr を設定します。

# vba
Function convertToInteger(newStr As Variant)

    MsgBox (CInt(newStr))

End Function

Sub newFunc()
convertToInteger ("12.5")
End Sub

出力:

文字列を VBA の int として数値に変換します

VBA で文字列を Long に変換する

CLng() 関数を使用して、この変換を実行できます。この関数の構文を以下に示します。

# vba
CLng(Str)

文字列をいくつかの長いデータ型に変更することが目標である場合は、CLng() 関数を使用できます。このステートメントの項目は、CLng() と文字列です。

この関数は、文字列を強制的に long データ型に変更します。

文字列が小数部を保持している場合、この関数はそれを丸めます。分数が正確に 0.4 の場合、この関数は、以下に示すように、最も近い偶数に変更します。

# vba
0.4 will become 0.
1.6 and 2.4 both will become 2.
3.7 and 4.3 will become 4

CLng() は、国際的に認識されている長いデータ型への文字列変換を実行するためによく使用されます。簡単に言うと、CLng() は通常、コンピュータの場所に依存する特徴的な小数/千の区切り文字と多くの通貨オプションを区別します。

整数データ型が数値を保持できる範囲は、-2,147,483,648〜2,147,483,647 です。文字列がこの範囲内にない場合、エラーが発生します。

例を見て、CLng() 関数を使用してみましょう。この例では、以下に示すように、文字列を long に変更するための引数として newStr を設定しています。

# vba
Function convertToLong(newStr As Variant)

    MsgBox (CLng(newStr))

End Function

Sub newFunc()
convertToLong ("15.7")
End Sub

出力:

VBA で文字列を数値に変換する

長いデータ型と整数データ型の違いは 1つだけです。長いデータ型では、より大きな数を使用できます。

しかし、昔は十分なメモリがなかったため、長いデータ型を使用することはお勧めしませんでした。

現代では、メモリはもはや問題ではありません。整数の代わりに long データ型を使用できます。

VBA で文字列をシングルに変換する

以下に示すように、次の構文を使用して、文字列を単一のデータ型の数に簡単に変換できます。

# vba
CSng(str)

CSng() 関数を使用して、この変換を実行できます。上記のステートメントには、CSng() と文字列の 2つの項目があります。

この関数は、文字列を強制的に単一のデータ型に変更します。

CSng() は、国際的に認識されている文字列を単一のデータ型に変換するためによく使用されます。CSng() は通常、コンピュータの場所に依存する特徴的な小数/千の区切り文字と通貨オプションを区別します。

単一のデータ型が浮動小数点数を保持できる範囲は次のとおりです。

  • 値が負の場合は 3.402823E38〜-1.401298E-45
  • 値が正の場合、1.401298E-45 から 3.402823E38

文字列がこの範囲内にない場合、エラーが表示されます。以下に示すように、文字列を単一に変更するための引数として newStr を設定する例を見てみましょう。

# vba
Function convertToSingle(newStr As Variant)

    MsgBox (CSng(newStr))

End Function

Sub newFunc()
convertToSingle ("1.3")
End Sub

出力:

VBA で文字列を単一の数値に変換する

VBA で文字列を Double に変換する

次のステートメントを使用すると、文字列をいくつかの double データ型に簡単に変換できます。この関数の構文は次のとおりです。

# vba
CDbl(str)

文字列を double データ型に変更するには、CDbl() 関数を使用することをお勧めします。この関数は、文字列を強制的に double データ型に変更します。

CDbl() は、国際的に認識されている文字列を double データ型に変換するためによく使用されます。

簡単に言うと、CDbl() は通常、コンピュータの場所に応じて、特徴的な 10 進数/1000 進数の区切り文字と多くの通貨オプションを区別します。

double データ型が浮動小数点数を保持できる範囲は以下のとおりです。

  • –1.79769313486231E308 から-4.94065645841247E-324 値が負の場合。
  • -4.94065645841247E-324 から 1.79769313486232E308(値が正の場合)。

文字列がこの範囲内にない場合、エラーが表示されます。以下に示すように、文字列を double に変更する引数として newStr を設定する例を見てみましょう。

# vba
Function convertToDouble(newStr As Variant)

    MsgBox (CDbl(newStr))

End Function

Sub newFunc()
convertToDouble ("1.345")
End Sub

出力:

VBA で文字列を double として数値に変換する

VBA で文字列を通貨に変換する

次のステートメントを使用すると、文字列をいくつかの通貨データ型に簡単に変換できます。関数の構文を以下に示します。

# vba
CCur(newStr)

文字列を通貨データ型に変更するには、CCur() 関数を使用することをお勧めします。この関数は、文字列を通貨データ型に強制的に変更します。

CCur() は、国際的に認識されている文字列を通貨データ型に変換するためによく使用されます。

これは、CCur() が一般に、コンピュータの場所に依存する特徴的な小数/千の区切り文字と多くの通貨オプションを区別することを意味します。通貨データ型は、10,000 までの整数を保持できます。

その結果、通貨は小数点の左側に 15 の数値、小数点の右側に 4つの数値を保持できます。したがって、通貨が数値を保持できる範囲は次のとおりです。
-922,337,203,685,477.5808 から 922,337,203,685,477.5807。

文字列がこの範囲内にない場合、エラーが表示されます。

以下に示すように、文字列を通貨に変更するための引数として newStr を設定する例を見てみましょう。

# vba
Function convertToCurrency(newStr As Variant)

    msgBox(CCur(newStr))

End Function

VBA で文字列を 10 進数に変換する

次のステートメントを使用して、この変換を実行できます。

# vba
CDec(newStr)

文字列をいくつかの 10 進データ型に変更することが目標である場合は、CDec() 関数を使用できます。この関数は、文字列を Variant データ型の 10 進データサブタイプに強制的に変更します。

簡単に言うと、CDec() は、Decimal サブタイプに変更されたバリアントを返します。

CDec() は、文字列から 10 進データ型への国際的な変換を実行するためによく使用されます。これは、CDec() が通常、コンピュータの場所に依存する特徴的な小数/千の区切り文字と多くの通貨オプションを区別することを意味します。

10 進データ型は、10 の可変累乗を持つ整数を運ぶことができます。累乗は、小数点の右側に存在できる桁数を示します。

小数が値を保持できる範囲を以下に示します。

  • スケールが 0 の場合、つまり小数点以下の場合、範囲は 79,228,162,514,264,337,593,543,950,335 から 79,228,162,514,264,337,593,543,950,335 です。
  • 小数点以下 28 桁の場合、最大値と最小値は+7.9228162514264337593543950335 および-7.9228162514264337593543950335 です。
  • ゼロ値を含まない最小値は、-0.0000000000000000000000000001 および 0.0000000000000000000000000001 です。

以下に示すように、文字列を小数に変更するための引数として newStr を設定する例を見てみましょう。

# vba
Function convertToDecimal(newStr As Variant)

    msgBox(CDec(newStr))

End Function

関連記事 - VBA String