はじめに
随分前にVBAでデータ型を判定する関数がないかと思って調べてみると、VarType 関数という関数があることが分かりました。
ただ、JavascriptにおけるNumber.isInteger()のようにデータ型をbooleanで返す処理ではなかったため、備忘録として記事をまとめてみることにしました。
VarType関数の概要
-
VarType(varname)
で、変数varnameのデータ型を調べることができますが... - 「変数のサブタイプ、またはオブジェクトの既定のプロパティの型を示す整数型 (Integer) の値を返します」という説明の通り、データ型が整数として返されるのがポイントです。
定数 | 値 | 説明 |
---|---|---|
vbEmpty | 0 | 空 (未初期化) |
vbNull | 1 | Null (有効なデータではない) |
vbInteger | 2 | Integer |
vbLong | 3 | 長整数 |
vbSingle | 4 | 単精度浮動小数点数 |
vbDouble | 5 | 倍精度浮動小数点数 |
vbCurrency | 6 | 通貨値 |
vbDate | 7 | 日付値 |
vbString | 8 | String |
vbObject | 9 | Object |
vbError | 10 | エラー値 |
vbBoolean | 11 | ブール値 |
vbVariant | 12 | バリアント型 ( Variant ) (バリアントの 配列でのみ使用される) |
vbDataObject | 13 | データ アクセス オブジェクト |
vbDecimal | 14 | 10 進値 |
vbByte | 17 | バイト値 |
vbLongLong | 20 | LongLong 整数 (64 ビット プラットフォームでのみ有効) |
vbUserDefinedType | 36 | ユーザー定義型を含むバリアント |
vbArray | 8192 | 配列 (この関数によって返されたときに常に別の定数に追加されます) |
- 例えば以下のような形で
VarType
関数を使うと、上記の表のルールで整数が返されるので、結果だけを見ても何のデータ型なのかパッと理解しづらいと思います。
VarType関数の利用例
Sub test()
myVal = 3
Debug.Print VarType(myVal)
End Sub
実行結果
2
少し別のアプローチをしてみる
- 単にデータ型名を調べるだけなら、データ型名が返される
TypeName
関数を使った方が分かりやすいと思います。
TypeName関数の例
Private Sub test2()
myVal = 3
Debug.Print TypeName(myVal)
End Sub
実行結果
Integer
- データ型に応じて処理を分岐させるのであれば、以下のようにデータ型を判定してtrue/falseで返す関数を作った方が良いかもしれません。
- Nullの判定は組み込みの
isNull
関数、エラー値も同様に組み込みのisError
関数が使えるので、一部のデータ型の判定については自作する必要がありません。
データ型を判定する関数の例
Function IsInteger(var As Variant) As Boolean
IsInteger = (VarType(var) = vbInteger)
End Function
Function IsLong(var As Variant) As Boolean
IsLong = (VarType(var) = vbLong)
End Function
Function IsString(var As Variant) As Boolean
IsString = (VarType(var) = vbString)
End Function
まとめ
-
IsInteger
やIsString
程度の関数は組み込みで用意してあるのが普通だと思っていたので、少々意外な結果でした。 - こういうちょっとした機能が足りていないのが、多くの人がVBAを微妙だと感じる原因なのかもしれません...