VB6・VBA関数メモ:TypeName関数

TypeName関数についてメモしておきます。
指定値のデータ型の名前を取得する関数になります。
データ型で処理を分岐する際に便利です。
コントロールの種類も判別できます。

似た関数にVarType関数がありますが、
オブジェクトの種類を判別できないのでTypeName関数を使った方が便利な事が多い気がします。

Variant型やオブジェクトの場合は"Empty"や"Nothing"等、定義した型以外の名前が返ることがあるので注意です。


概要

TypeName(VarName) As String
機能 指定値のデータ型の名前を返す
引数 VarName データ型を調べる値< Variant型
戻り値 指定値のデータ型の名前 String型


使用例

説明 記述例 出力
指定値のデータ型の名前を取得
Dim var As Byte
Debug.Print TypeName(var)
"Byte"
Dim var As Integer
Debug.Print TypeName(var)
"Integer"
Dim var As Long
Debug.Print TypeName(var)
"Long"
Dim var As Single
Debug.Print TypeName(var)
"Single"
Dim var As Double
Debug.Print TypeName(var)
"Double"
Dim var As Currency
Debug.Print TypeName(var)
"Currency"
Dim var
var = CDec(123)
Debug.Print TypeName(var)
"Decimal"
Dim var As Date
Debug.Print TypeName(var)
"Date"
Dim var As String
Debug.Print TypeName(var)
"String"
Dim var As Boolean
Debug.Print TypeName(var)
"Boolean"


動作検証

説明 記述例 出力
値が格納されていないVariant型の場合は"Empty"が返る
Dim var As Variant
Debug.Print TypeName(var)
"Empty"
Nullが格納されている場合は"Null"が返る
Dim var As Variant
var = Null
Debug.Print TypeName(var)
"Null"
vbNullStringが格納されている場合は"String"が返る
Dim var As Variant
var = vbNullString
Debug.Print TypeName(var)
"String"
Dim var As String
var = vbNullString
Debug.Print TypeName(var)
"String"
Variant型は格納した値のデータ型の名前が返る
Dim var As Variant
var = "abc"
Debug.Print TypeName(var)
"String"
オブジェクトにNothingが格納されている場合は"Nothing"が返る
Dim var As Object
Set var = Nothing
Debug.Print TypeName(var)
"Nothing"
Dim var As MyClass
Set var = Nothing
Debug.Print TypeName(var)
"Nothing"
オブジェクトは格納した値のデータ型の名前が返る
(独自のクラスも可)
Dim var As Object
Set var = New MyClass
Debug.Print TypeName(var)
"MyClass"
配列の場合は"()"が付加される
Dim var() As String
Debug.Print TypeName(var)
"String()"
Variant型の配列の場合は"Variant()"が返る
Dim var() As Variant
Debug.Print TypeName(var)
"Variant()"
オブジェクトの配列の場合は"Object()"が返る
Dim var() As Object
Debug.Print TypeName(var)
"Object()"
Dim var() As MyClass
Debug.Print TypeName(var)
"Object()"
ユーザ定義のエラーの場合は"Error"が返る
(CVErr関数参照)
Dim var
var = CVErr(123)
Debug.Print TypeName(var)
"Error"
ユーザ定義以外のエラーは
"Error"と返さない
(ErrObject型としては返ってくるが)
On Error Resume Next
Dim var
var = 1 / 0
Debug.Print TypeName(Err)
"ErrObject"
On Error Resume Next
Dim var
var = 1 / 0
Debug.Print TypeName(Error)
"String"
構造体を指定した場合はエラーとなる
Dim var As MyType
Debug.Print TypeName(var)
エラー
列挙体を指定した場合は"Long"が返る
Dim var As MyEnum
Debug.Print TypeName(var)
"Long"
"Unknown"と返すパターンもあるようですが再現できませんでした…;
???
"Unknown"


応用例

説明 記述例 出力
データ型で処理を分岐
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 TypeName(var(i))
    Case "Integer"
        Debug.Print "数値"
    Case "String"
        Debug.Print "文字列"
    Case "Date"
        Debug.Print "日付"
    Case "Error"
        Debug.Print "ユーザ定義エラー"
    End Select
Next i
"数値"
"文字列"
"日付"
"ユーザ定義エラー"


コメント
コメントする








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