変数の型を文字列で取得する方法

今回の目標

「Variant型を使ってるけど、どの型のデータが入っているか調べたい!」や「オブジェクトの型を調べたい!」と思ったあなたへ。
この記事では、TypeName関数の使い方を丁寧に解説します!

目標リスト

  • TypeName関数で変数の型を調べられるようになる
  • TypeName関数でリテラル値以外の型を調べられるようになる

TypeName関数について

TypeName関数とは

TypeName関数は、引数のデータをもとに型を判定し、対応する文字列を返します。
その返された値を利用して、テストをスムーズに行えたり、条件分岐などの制御に利用できます。

TypeName関数の構文

TypeName (varname)

TypeName関数の戻り値

varname の型に対応した文字列が戻ります。
例えば、データの型が Integer型なら「Integer」、String型なら「String」が戻ります。

※一部、Microsoft社のリファレンスを参照しています。
 【Microsoft公式】 TypeName 関数

返される文字列説明(型名)
Byteバイト値
Integer整数型
Long長整数
Single単精度浮動小数点数
Double倍精度浮動小数点数
Currency通貨値
Decimal10 進値
Date日付値
String文字列
Booleanブール値
Errorエラー値
ObjectObject
Unknown不明な型のオブジェクト

TypeName関数で型を調べる

TypeName関数を使うと、指定した値や変数のデータ型を文字列で判定できます。
引数には変数だけでなく、数値や文字列を直接指定することも可能です。

サンプルコード

Sub SampleTypeName1()
    Dim num As Long
    Dim str As String
    
    num = 100
    Debug.Print TypeName(100)  '100は、Integer型
    Debug.Print TypeName(num)  '変数numは、Long型
    Debug.Print TypeName(str)  '変数strは、String型
End Sub
【実行例】

Integer
Long
String

Variant型のデータから型を判断する

Variant型の変数に格納されている実際のデータから、TypeName関数はその型を自動で判定します。 Variant型は「どんな型の値でも代入できる」特殊な型のため、変数の中身によって実際の型が変わります。 そのため、現在どんな型の値が入っているかを確認したいときに、TypeName関数が役立ちます。

サンプルコード

Sub SampleTypeName2()
    Dim var As Variant
    
    Debug.Print TypeName(var)
    
    var = 10
    Debug.Print TypeName(var)
    
    var = "string"
    Debug.Print TypeName(var)
End Sub
【実行例】

Empty
Integer
String

Object型のデータについて

Object型を含む、Workbook型やWorksheet型などのオブジェクト変数は、そのオブジェクトの型名が返ります。 このとき、参照が設定されていない(Nothingの)オブジェクト変数に対しては、"Nothing" という文字列を返します。

サンプルコード

Sub SampleTypeName3()
    Dim obj As Object
    
    Debug.Print TypeName(obj)
    
    Set obj = ThisWorkbook
    Debug.Print TypeName(obj)
    
    Set obj = CreateObject("Scripting.FileSystemObject")
    Debug.Print TypeName(obj)
End Sub
【実行例】

Nothing
Workbook
FileSystemObject

VarType関数との違いについて

VarType関数は、引数のデータ型を数値(定数)で返すため、プログラム内で条件分岐などの制御処理に向いています。
一方、TypeName関数は、データ型を文字列として返すため、デバッグ(Debug.Printなど)で型を確認したいときに便利です。 また、TypeName関数はオブジェクト変数でも型名を返すため、どの種類のオブジェクトかを判定したい場合にも利用できます。

VarType関数とTypeName関数の使い分けの詳細については、下記リンクから参照してください。
VarType関数とTypeName関数の使い分け方法

関連リンク

ページの先頭へ