VB6・VBA関数メモ:VarType関数

VarType関数についてメモしておきます。
指定値のデータ型の番号を取得する関数になります。
データ型で処理を分岐する際に便利です。

TypeName関数と違いオブジェクトは全てvbObjectとして返されてしまうので
オブジェクトの種類を判別したいときはTypeName関数を使う必要がありそうです。

Variant型やオブジェクトの場合はvbEmptyやvbNothing等、定義した型以外の番号が返ることがあるので注意です。


概要

VarType(VarName) As VbVarType
機能 指定値のデータ型の番号を返す
引数 VarName データ型を調べる値 Variant型
戻り値 指定値のデータ型の番号 VbVarType型


使用例

説明 記述例 出力
指定値のデータ型の番号を取得
Dim var As String
Debug.Print VarType(var)
8


VbVarType列挙体

定数名 説明 記述例 出力
vbEmpty 0 未初期化
Dim var
Debug.Print VarType(var)
0
vbNull 1 Null値
Dim var
var = Null
Debug.Print VarType(var)
1
vbInteger 2 Integer型(整数型)
Dim var As Integer
Debug.Print VarType(var)
2
vbLong 3 Long型(長整数型)
Dim var As Long
Debug.Print VarType(var)
3
vbSingle 4 Single型(単精度浮動小数点数型)
Dim var As Single
Debug.Print VarType(var)
4
vbDouble 5 Double型(倍精度浮動小数点数型)
Dim var As Double
Debug.Print VarType(var)
5
vbCurrency 6 Currency型(通貨型)
Dim var As Currency
Debug.Print VarType(var)
6
vbDate 7 Date型(日付型)
Dim var As Date
Debug.Print VarType(var)
7
vbString 8 String型(文字列型)
Dim var As String
Debug.Print VarType(var)
8
vbObject 9 オブジェクト
Dim var As Object
Debug.Print VarType(var)
9
vbError 10 エラー値
※ユーザー定義のエラーのみ対象
(CVErr関数参照)
Dim var
var = CVErr(123)
Debug.Print VarType(var)
10
vbBoolean 11 Boolean型
Dim var As Boolean
Debug.Print VarType(var)
11
vbVariant 12 Variant型(Variant型の配列の場合のみ)
(例ではvbVariant+vbArrayが返る)
Dim var() As Variant
Debug.Print VarType(var)
8204
vbDataObject 13 非OLE オートメーション オブジェクト
???
13
vbDecimal 14 Decimal型(10 進数型)
Dim var
var = CDec(123)
Debug.Print VarType(var)
14
vbByte 17 Byte型(バイト型)
Dim var As Byte
Debug.Print VarType(var)
17
vbUserDefinedType 36 構造体を含むVariant型
???
36
vbArray 8192 配列
(配列はデータ型の定数+配列の定数を返す)
(例ではvbString+vbArrayが返る)
Dim var() As String
Debug.Print VarType(var)
8200


動作検証

説明 記述例 出力
値が格納されていないVariant型の場合はvbEmptyが返る
Dim var As Variant
Debug.Print VarType(var)
0
Nullが格納されている場合はvbNullが返る
Dim var As Variant
var = Null
Debug.Print VarType(var)
1
vbNullStringが格納されている場合はvbStringが返る
Dim var As Variant
var = vbNullString
Debug.Print VarType(var)
8
Dim var As String
var = vbNullString
Debug.Print VarType(var)
8
Variant型は格納した値のデータ型の番号が返る
Dim var As Variant
var = "abc"
Debug.Print VarType(var)
8
オブジェクト型の場合はvbObjectが返る
Dim var As Object
Set var = Nothing
Debug.Print VarType(var)
9
Dim var As MyClass
Set var = Nothing
Debug.Print VarType(var)
9
Dim var As Object
Set var = New MyClass
Debug.Print VarType(var)
9
配列の場合はデータ型の定数+配列の定数の合計を返す
Dim var() As String
Debug.Print VarType(var)
8200
ユーザ定義以外のエラーは
vbError として扱われない
On Error Resume Next
Dim var
var = 1 / 0
Debug.Print VarType(Err)
3
On Error Resume Next
Dim var
var = 1 / 0
Debug.Print VarType(Error)
8
構造体を指定した場合はエラーとなる
Dim var As MyType
Debug.Print VarType(var)
エラー
列挙体を指定した場合はvbLongが返る
Dim var As MyEnum
Debug.Print VarType(var)
3


応用例

説明 記述例 出力
データ型で処理を分岐
Dim var(3) As Variant
var(0) = 123
var(1) = "abc"
var(2) = #11/23/2011#
var(3) = CVErr(123)

Dim i As Integer
For i = LBound(var) To UBound(var)
    Select Case VarType(var(i))
    Case vbInteger
        Debug.Print "数値"
    Case vbString
        Debug.Print "文字列"
    Case vbDate
        Debug.Print "日付"
    Case vbError
        Debug.Print "ユーザ定義エラー"
    End Select
Next i
"数値"
"文字列"
"日付"
"ユーザ定義エラー"


コメント
コメントする








    
この記事のトラックバックURL
トラックバック