こちらの記事では、VBAで変数のデータ型を調べる方法をご紹介しています。
VBAで利用する変数は最初にデータ型を宣言することなく利用する事もできます。
これは一見便利なように思えますが、実は意図しないデータ型としてデータが扱われることにより、思わぬ不具合が潜んでしまうリスクを伴います。
また、変数は予めデータ型を宣言して利用することで、データ型が異なる内容を変数に代入しようとした場合にエラーで通知をしてくれます。このように既知のエラーとすることで早期解決につながります。
しかしVBAではデータ型を宣言しても、データ型が不明になってしまうことがあります。
それは、Variant型というデータ型で宣言した場合です。
これは何でも代入できてしまうデータ型で、代入されたデータに合わせてデータ型が変わってしまうデータ型となっています。よくオブジェクトを代入する場合に利用されます。
Variant型を利用した場合、今一体どんなデータ型なのか?調べない限りわかりません。
VBA でデータ型を調べる方法
VBAで変数のデータ型を調べるには VarType 関数を利用します。
VarType 構文
VarType(varname)
引数varnameには、データ型を調べたい変数を指定します。
戻り値
次のいずれかの定数または定数の合計が返されます。
vbEmpty | 0 | 空 (未初期化) |
vbNull | 1 | Null (有効なデータではない) |
vbInteger | 2 | Integer型 |
vbLong | 3 | Long型(長整数) |
vbSingle | 4 | Single型(単精度浮動小数点数) |
vbDouble | 5 | Double型(倍精度浮動小数点数) |
vbCurrency | 6 | 通貨型 |
vbDate | 7 | 日付型 |
vbString | 8 | String型 |
vbObject | 9 | Object |
vbError | 10 | エラー値 |
vbBoolean | 11 | Boolean型 |
vbVariant | 12 | Variant型 (バリアントの 配列でのみ使用される) |
vbDataObject | 13 | データ アクセス オブジェクト |
vbDecimal | 14 | Decimal型(10進値) |
vbByte | 17 | Byte型 |
vbLongLong | 20 | LongPtr型(64 ビット プラットフォームでのみ有効) |
vbUserDefinedType | 36 | ユーザー定義型を含むバリアント |
vbArray | 8192 | 配列 (※注意 この関数によって返される場合は常に別の定数にが加算されます) 8192という値がそのまま返却されることはありません。 Null の配列の場合 8183 を返却 (1 + 8192) Integer型 の配列の場合 8194 を返却 (2 + 8192) Long型 の配列の場合 8195 を返却 (3 + 8192) Single型 の配列の場合 8196 を返却 (4 + 8192) Double型 の配列の場合 8197 を返却 (5 + 8192) Date型 の配列の場合 8199 を返却 (7 + 8192) String型 の配列の場合 8200 を返却 (8 + 8192) Object型 の配列の場合 8201 を返却 (9 + 8192) Boolean型 の配列の場合 8203 を返却 (11 + 8192) Variant型 の配列の場合 8204 を返却 (12 + 8192) |
VarType関数の使用例
下記はVBAでデータ型を求める時のVarType関数の使用例です。
Public Function Test()
Dim varTest As Variant
varTest = Null
Debug.Print VarType(varTest)
'戻り値は 1 となる。
varTest = 1
Debug.Print VarType(varTest)
'戻り値は 2 となる。
varTest = "a"
Debug.Print VarType(varTest)
'戻り値は 8 となる。
Set varTest = ThisWorkbook.ActiveSheet
Debug.Print VarType(varTest)
'戻り値は 9 となる。
End Function
まとめ
VBAで変数のデータ型を調べるにはVarType関数を利用して、戻り値の数値でデータ型を判断する。