変数の型を文字列で取得する方法
今回の目標
「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 | 通貨値 |
| Decimal | 10 進値 |
| Date | 日付値 |
| String | 文字列 |
| Boolean | ブール値 |
| Error | エラー値 |
| Object | Object |
| 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関数の使い分け方法
