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 関数で扱うと以下のようにエラーダイアログが出力されます。