更新日:、 作成日:
VBA CInt 関数:数値に変換する
はじめに
Excel VBA マクロの CInt 関数から数値に変換する方法を紹介します。
CInt 関数は、文字列や日付などを数値型 (Integer) に変換します。
他の数値型に変換したいときは次の関数を使用します。使い方は CInt と同じです。
関数 | 型 |
CByte | Byte |
CInt | Integer |
CLng | Long |
CSng | Single |
CDbl | Double |
CCur | Currency |
CDec | Decimal |
CLngLng | 32 ビット環境:エラー 64 ビット環境:LongLong |
CLngPtr | 32 ビット環境:Long 64 ビット環境:LongLong |
文字列を数値型に変換したり、数値を別の数値型に変換したいときに使用します。
CInt 関数の引数と戻り値
CInt(値)
値を数値型 (Integer) に変換します。
引数「値」 | 文字列や数値を指定します。 |
戻り値の型 | 数値型 (Integer) |
解説
Integer の数値を文字列に代入すると、CInt 関数を使用したときと同じ結果になります。
数値を数値型の変数に代入すると、自動でその型に変換されます。
引数「値」が "1" なら 1 に変換されます。
引数「値」が True なら 1 に、False なら 0 に変換されます。
Integer など整数型に変換するとき、引数「値」に少数があるときは偶数丸めされます。偶数丸めとは、丸める桁数の値が 5 のときに偶数になるように丸められることです。それ以外は四捨五入と同じです。
変換前 | 変換後 |
0.5 | 0 |
1.5 | 2 |
2.5 | 2 |
3.5 | 4 |
変換できる数値の範囲は、その数値型の範囲 (Integer なら) -32,768 ~ 32,767 の間です。
範囲外の値を指定すると「エラー 6 オーバーフローしました。」が発生します。
変換できない値を指定すると「エラー 13 型が一致しません。」が発生します。
変換できるかどうかは「IsNumeric 関数」で判定できます。
引数「値」が日付型 (Date) なら数値に変換できます。日付形式の文字列なら変換できません。「IsNumeric 関数」はどちらも False を返します。
Val 関数との違い
「Val 関数」を使用しても、文字列を数値型に変換できます。
CInt 関数:
- "123" のように、全角の数字を変換できます。
- "1,234" のように、カンマ区切りの数字を変換できます。
- "\123" のように、円マークが付いた数字を変換できます。
- 空白や数字以外の文字列が含まれるときはエラーになります。
Val 関数:
- 数値に変換できない値は 0 に変換します。エラーは発生しません。
- 半角の数字だけ変換できます。
- 空白を削除してから変換します。
- "12あいう" のように先頭が数字なら、その数字を変換します。
- "1,234" のようにカンマ区切りの数字は、カンマの前の数字を変換します。
スポンサーリンク
使用例
CInt 関数の使用例を紹介します。
数値に変換する
数値に変換します。
Dim i As Integer
i = CInt("123")
Debug.Print(i) ' 123
i = CInt("123")
Debug.Print(i) ' 123
i = CInt("1.5")
Debug.Print(i) ' 2
i = CInt("2.5")
Debug.Print(i) ' 2
i = CInt("\100") ' 円マーク
Debug.Print(i) ' 100
i = CInt("1,000")
Debug.Print(i) ' 1000
i = CInt(True)
Debug.Print(i) ' 1
i = CInt(Now)
Debug.Print(i) ' 変換できる、IsNumeric 関数は False
i = CInt("2013/1/1") ' 型が一致しません
i = CInt("32768") ' オーバーフロー
i = CInt("Tips") ' 型が一致しません
i = CInt("1 0") ' 型が一致しません
i = CInt("100円") ' 型が一致しません
i = CInt("1.5g") ' 型が一致しません
数値に変換できるか判定する
「IsNumeric 関数」を使用して、変換できるか判定できます。
Dim s As String
s = "123あいう"
Dim i As Integer
If IsNumeric(s) = True Then ' 変換できるときだけ数値にする
i = CInt(s)
Else
i = 0
End If
Val 関数から数値に変換する
「Val 関数」を使用しても数値型に変換できます。
Dim d As Double
d = Val("123")
Debug.Print(d) ' 123
d = Val("123")
Debug.Print(d) ' 0
d = Val("1.5")
Debug.Print(d) ' 1.5
d = Val("2.5")
Debug.Print(d) ' 2.5
d = Val("\100") ' 円マーク
Debug.Print(d) ' 0
d = Val("1,000")
Debug.Print(d) ' 1
d = Val("あいう")
Debug.Print(d) ' 0
d = Val("あいう123")
Debug.Print(d) ' 0
d = Val("123あいう")
Debug.Print(d) ' 123
d = Val("1 0")
Debug.Print(d) ' 10
d = Val("1.5g")
Debug.Print(d) ' 1.5
d = Val("&HFF")
Debug.Print(d) ' 255