VBA VarType 関数:型を示す値を取得する

はじめに

Excel VBA マクロの VarType 関数から型を示す値を取得する方法を紹介します。

VarType 関数は、指定した変数のデータ型を示す数値を返します。

100 なら 2 を返します。

文字列なら 8 を返します。

Variant 型の配列なら 8204 を返します。

Variant 型に代入されている型を判定したいときに使用します。

型情報を型名の文字列で取得するには「TypeName 関数」を使用します。
  • 目次
    • 構文
    • 解説
    • 使用例

構文

VarType()
の型を示す数値を取得します。

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

引数「値」と戻り値の例

戻り値 定数
Empty0vbEmpty
Null1vbNull
1002vbInteger
500003vbLong
CSng(1.5)4vbSingle
1.55vbDouble
CCur(100)6vbCurrency
#12/31/2000#7vbDate
"Tips"8vbString
Nothing9vbObject
CVErr(2042)10vbError
True11vbBoolean
Variant の配列12vbVariant
CDec(100)14vbDecimal
CByte(1)17vbByte
CLngLng(100)20vbLongLong、エクセルのバージョンが 64 ビットのときのみ使用可
配列型8192vbArray

配列を指定すると 型の値 + 配列の値 の合計を返します。

戻り値 定数
Integer の配列8194 (2 + 8192)vbInteger + vbArray
String の配列8200 (8 + 8192)vbString + vbArray
Variant の配列8204 (12 + 8192)vbVariant + vbArray

解説

引数「値」の型に対応する値 (Integer 型なら 2) を返します。戻り値はすべて VbVarType 列挙型として定義されています。

引数「値」が配列なら、その配列の型の値 (vbInteger など) に配列の値 (vbArray) を加えた値を返します。

Variant 型や Object 型のときは、それに代入されている型の値を返します。

Variant 型の配列のときは 8204 (vbVariant + vbArray) を返します。

Object 型の配列のときは 8201 (vbObject + vbArray) を返します。

引数「値」が構造体 (Type) なら「エラー パブリック オブジェクト モジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。」が発生します。

型情報を型名の文字列で取得するには「TypeName 関数」を使用します。

使用例

型を示す値を取得する。

Dim v As Variant
Dim i As Integer

v = 100
i = VarType(v)
Debug.Print(i) ' 2 (vbInteger)

v = 1.5
i = VarType(v)
Debug.Print(i) ' 5 (vbDouble)

v = Now
i = VarType(v)
Debug.Print(i) ' 7 (vbDate)

v = "Tips"
i = VarType(v)
Debug.Print(i) ' 8 (vbString)

v = CVErr(2042)
i = VarType(v)
Debug.Print(i) ' 10 (vbError)

v = True
i = VarType(v)
Debug.Print(i) ' 11 (vbBoolean)

Dim vEmpty As Variant
i = VarType(vEmpty)
Debug.Print(i) ' 0 (vbEmpty)

Dim o As Object
i = VarType(o)
Debug.Print(i) ' 9 (vbObject)

Set o = Worksheets(1)
i = VarType(o)
Debug.Print(i) ' 9 (vbObject)

v = Array(1, 2, 3)
i = VarType(v)
Debug.Print(i) ' 8204 (12 + 8192、vbVariant + vbArray)

Dim ints(10) As Integer
i = VarType(ints)
Debug.Print(i) ' 8194 (2 + 8192、vbInteger + vbArray)

Dim vs(10) As Variant
vs(0) = 10
i = VarType(vs)
Debug.Print(i) ' 8204 (12 + 8192、vbVariant + vbArray)