更新日:、 作成日:
VBA 変数の型やデータ型の一覧
はじめに
Excel VBA マクロで変数の型やデータ型の一覧を紹介します。
数値型には主に、Integer、Long、Double などがあります。それぞれの最小値と最大値を紹介します。
他にも文字列型の String、日付型の Date、ブール型の Boolean など様々な型があります。
変数には型にあった値を代入する必要があります。そうでない値を代入するとエラーになります。
データ型の一覧
VBA で使用できる型には主に次のものがあります。最小値と最大値も紹介します。
型名 | 型宣言文字 | データ型 | 値の例や最小値と最大値 |
Byte | バイト型 | 0 ~ 255 の整数 | |
Integer | % | 整数型 | -32,768 ~ 32,767 の整数 |
Long | & | 長整数型 | -2,147,483,648 ~ 2,147,483,647 の整数 |
Single | ! | 単精度浮動小数点型 | 負:-3.402823E38 ~ -1.401298E-45 正:1.401298E-45 ~ 3.402823E38 |
Double | # | 倍精度浮動小数点型 | 負:-1.79769313486231E308 ~ -4.94065645841247E-324 正:4.94065645841247E-324 ~ 1.79769313486232E308 |
Currency | @ | 通貨型 | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
Decimal | 10 進型 | 少数なしの最大値:79,228,162,514,264,337,593,543,950,335 少数ありの最大値:7.9228162514264337593543950335 | |
LongLong | 超長整数型 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 の整数 | |
LongPtr | 整数型 | 32 ビット環境:Long と同じ 64 ビット環境:LongLong と同じ | |
String | 文字列型 | "文字列" 可変長:最大で約 20 億 (2^31) 文字 固定長:1 ~ 約 64 K (2^16) の文字 | |
Date | 日付型 | 西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻 | |
Boolean | ブール型 | True または False | |
Object | オブジェクト型 | 参照型 (Worksheet やクラスなど) | |
Variant | バリアント型 | なんでも | |
Type | ユーザー定義型 | Type で定義した型、構造体 |
Decimal 型
この他に変数の型として宣言できませんが VBA で最大の桁数を持つ Decimal 型が存在します。Variant 型に「CDec 関数」を使用したときだけ使用できる型です。
Dim d As Variant
d = CDec("79,228,162,514,264,337,593,543,950,335")
Debug.Print(d) ' 79228162514264337593543950335、Decimal
UInteger 型
符号なしの UInteger を使用したいときは、CUInt 関数を作成して変換できます。
Sub 実行()
Dim uint As Long
uint = CUInt(-10)
Debug.Print(uint) ' 65526
uint = CUInt(10)
Debug.Print(uint) ' 10
End Sub
' 符号あり Integer を 符号なし UInteger に変換します。
Function CUInt(ByVal value As Integer) As Long
' value が正の値のときはそのまま
If value >= 0 Then
CUInt = value
Exit Function
End If
' 負の値のときは UInteger の最大値 + 1 の値を加える
CUInt = value + 65536
End Function
LongLong、LongPtr 型
エクセルのバージョンが 64 ビットのときは、LongLong 型を使用できます。
LongPtr は32 ビットでは Long 型になります。64 ビットでは LongLong 型になります。両方の環境で動作するコードを作成するときに使用します。
スポンサーリンク
型宣言文字について
型宣言文字を使用するには数値の後ろに型宣言文字を付けて 10& のように入力します。
& は Long の型宣言文字なので、この 10 は Long 型になります。
% は Integer の型宣言文字ですが、VBA の数値型の基本が Integer なので省略されます。
Dim s As String
s = TypeName(10%) ' % は省略される
Debug.Print(s) ' Integer
s = TypeName(10&)
Debug.Print(s) ' Long
s = TypeName(10@)
Debug.Print(s) ' Currency
s = TypeName(10!)
Debug.Print(s) ' Single
s = TypeName(10#)
Debug.Print(s) ' Double
16 進数との組み合わせでは Integer または Long の型宣言文字のみ使用できます。
Dim s As String
s = TypeName(&H10&)
Debug.Print(s) ' Long
s = TypeName(&H10#) ' エラー
Debug.Print(s)
数値型について
数値型には Byte, Integer, Long … と数多くの型が用意されています。まずは Integer の選択を考えます。Integer が VBA の数値型の基本だからです。
Integer の範囲は -32,768 ~ 32,767 と狭いです。この範囲を超える数値を扱うときは Long や Currency などを検討します。
少数を扱うなら Single や Double を選択します。ただし、小数の計算で誤差が発生するので注意が必要です。
文字列型について
文字列には可変長と固定長があります。一般的に可変長を使用します。
String * 文字数 のように入力して固定長の文字列型を宣言できます。固定長にその文字数より長い文字列が設定されたときは切り捨てられます。
Dim 可変長 As String
可変長 = "1234"
Debug.Print(可変長) ' 1234
Dim 固定長 As String * 3 ' 最大 3 文字
固定長 = "1234"
Debug.Print(固定長) ' 123
データ型を変換する
Integer に文字列など、型に合わない値を代入するとエラーになります。
Dim 数値 As Integer
数値 = 10 ' OK
数値 = "文字" ' エラー
数値型の範囲を超える値を代入するとエラーになります。
Dim バイト As Byte
バイト = 255 ' OK
バイト = 256 ' エラー
互換性がある値なら型を自動で変換できます。
Dim バイト As Byte
Dim イント As Integer
Dim ロング As Long
ロング = 256 ' Long に 256 を代入する
イント = ロング ' Long が Integer に変換される
ロング = イント ' Integer が Long に変換される
バイト = ロング ' エラー、256 が Byte の範囲を超えている
同じように数字を数値や日付形式の文字列を日付に代入できます。
Dim 文字列 As String
Dim イント As Integer
Dim バイト As Byte
文字列 = "256" ' 数字の 256 を代入する
イント = 文字列 ' String が Integer に変換される
文字列 = イント ' Integer が String に変換される
バイト = 文字列 ' エラー、Byte に変換されるが範囲を超えている
Dim 文字列 As String
Dim 日付 As Date
文字列 = "2000/12/31" ' 文字の日付形式を代入する
日付 = 文字列 ' String が Date に変換される
文字列 = 日付 ' Date が String に変換される
String 型は数値でも日付でも代入できるので便利です。
型変換について詳しくは次をご覧ください。
Variant 型は多用しない
Variant 型には数値でも文字でもすべての値を代入できます。便利だからと言って多用は禁物です。
型を制限することで、想定外の値が代入されるときにエラーが発生して防いでくれています。不具合を発生させないためにも適切な型を選択することが大切です。
変数の型を確認する
Variant や Object に何の型が入っているのかを確認するには「TypeName 関数」または「VarType 関数」を使用します。型名または型を表す値を取得できます。
Dim v As Variant
Dim 型名 As String
v = 1
型名 = TypeName(v)
Debug.Print(型名) ' Integer
v = "Tips"
型名 = TypeName(v)
Debug.Print(型名) ' String
Dim v As Variant
Dim 型 As Integer
v = 1
型 = VarType(v)
Debug.Print(型) ' 2
v = "Tips"
型 = VarType(v)
Debug.Print(型) ' 8
スポンサーリンク