[ Excel-VBA ] 文字列を数値に変換(カンマ区切り対応) ( Val / CDbl )

Pocket

VBA において、文字列を数値に変換するサンプルコードを掲載しています。Val 関数と CDbl 関数を使用して文字列を数値に変換しています。非常によく使う関数でしょう。

スポンサーリンク

文字列を数値に変換する Val 関数

Val 関数は文字列を Double 型の数値に変換します。ただし、カンマ区切り表記の場合、数値への変換は NG となります。正しくは変換できる部分まで変換し、Val 関数自体はエラーとなりません(途中で投げ出します)。

エクセルのセル(書式:文字列)のデータを使い計算を行うと計算結果が狂います(セルの書式設定も修正しましょう)。私のようなザルチェックの人ですと、間違いに気づくことすらないかもしれません。非常に危険です


Dim d As Double

d = Val("100")      ' 100
d = Val("-12")      ' -12
d = Val("-123.456") ' -123.456
d = Val("12E2")     ' 1200 指数表現は、Double型に変換可能

' 残念なことにエラーにはならない
d = Val("1,234") ' 1に変換される。期待しない数値となる

カンマ区切り表記でも数値に変換する CDbl 関数

Val 関数は中途半場な仕事をしましたが、CDbl 関数はカンマ区切りでも変換します。

    Dim i As Integer
    Dim d As Double

    ' Val 関数同様 Double 型に変換する
    d = CDbl("1,234,567.234") ' 1234567.234 カンマ区切りの表記でも変換OK

    ' 小数点を扱わないのであれば CInt も使用できるが、
    ' 扱える数値の範囲は意外と小さい
    i = CInt("1,234")      ' 1234 カンマ区切りの表記でも変換OK
    i = CInt("1,234.888")  ' 1235 小数点は四捨五入
    i = CInt("1,234.444")  ' 1234 小数点は四捨五入
    i = CInt("12E2")       ' 1200
    

Integer 型と Long 型で扱える数値の範囲

CInt 関数は Integer 型の数値に変換しましたが、Long 型に変換する CLng 関数も存在します。それぞれ扱える数値の範囲は下表の通りです。意外と扱える範囲は狭い印象を受けました。

関数 最小値 最大値
CInt Integer -32,768 +32,767
CLng Long -2,147,483,648 +2,147,483,647

この範囲を超える数値を CInt や CLng 関数で扱うと以下のようにエラーダイアログが出力されます。

オーバーフローしました

オーバーフローしました

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *