VBA CInt 関数:数値に変換する

はじめに

Excel VBA マクロの CInt 関数から数値に変換する方法を紹介します。

CInt 関数は、文字列や日付などを数値型 (Integer) に変換します。

他の数値型に変換したいときは次の関数を使用します。使い方は CInt と同じです。

関数
CByteByte
CIntInteger
CLngLong
CSngSingle
CDblDouble
CCurCurrency
CDecDecimal
CLngLng32 ビット環境:エラー
64 ビット環境:LongLong
CLngPtr32 ビット環境:Long
64 ビット環境:LongLong

文字列を数値型に変換したり、数値を別の数値型に変換したいときに使用します。

文字列を数値に変換するには「文字列を変換する」をご覧ください。
  • 目次
    • CInt 関数
    • 解説
    • 使用例

CInt 関数

CInt()
を数値型 (Integer) に変換します。

引数「値」文字列や数値を指定します。
戻り値の型数値型 (Integer)

解説

Integer の数値を文字列に代入すると、CInt 関数を使用したときと同じ結果になります。

数値を数値型の変数に代入すると、自動でその型に変換されます。

詳しくは「数値を変換する」をご覧ください。

引数「値」が "1" なら 1 に変換されます。

引数「値」が True なら 1 に、False なら 0 に変換されます。

Integer など整数型に変換するとき、引数「値」に少数があるときは偶数丸めされます。偶数丸めとは、丸める桁数の値が 5 のときに偶数になるように丸められることです。それ以外は四捨五入と同じです。

変換前 変換後
0.50
1.52
2.52
3.54

変換できる数値の範囲は、その数値型の範囲 (Integer なら) -32,768 ~ 32,767 の間です。

範囲外の値を指定すると「エラー 6 オーバーフローしました。」が発生します。

変換できない値を指定すると「エラー 13 型が一致しません。」が発生します。

変換できるかどうかは「IsNumeric 関数」で判定できます。

引数「値」が日付型 (Date) なら数値に変換できます。日付形式の文字列なら変換できません。「IsNumeric 関数」はどちらも False を返します。

Val 関数との違い

Val 関数」を使用しても、文字列を数値型に変換できます。

CInt 関数

  • "123" のように、全角の数字を変換できます。
  • "1,234" のように、カンマ区切りの数字を変換できます。
  • "\123" のように、円マークが付いた数字を変換できます。
  • 空白や数字以外の文字列が含まれるときはエラーになります。

Val 関数

  • 数値に変換できない値は 0 に変換します。エラーは発生しません。
  • 半角の数字だけ変換できます。
  • 空白を削除してから変換します。
  • "12あいう" のように先頭が数字なら、その数字を変換します。
  • "1,234" のようにカンマ区切りの数字は、カンマの前の数字を変換します。

使用例

数値に変換する。

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