こんにちは、Ryoです。
今回は変数の情報やオブジェクト、変数の種類を「文字列」で返してくれるTypeName関数と変数の内部処理形式を表す「整数型の値」を返すVarType関数について書いていこうと思います。用途は多くないと思いますが知っておくと便利です。
1.サンプル概要
ワークシート上に入力されたデータに対して「TypeName関数」でデータ型の取得と、ワークシート/ワークブックについての型も取得し、イミディエイトウィンドウに表示します。

上の表内データとワークシート、ワークブックの型を取得して表示させたものが以下になります。

次に同じ表を使用して「VarType関数」で変数の内部処理形式を示す整数型の値を取得すると、下のようになります。

以上がサンプル概要になります。
2.サンプルコード
◆TypeName関数
Sub Sample1()
'変数はVariant型で宣言
Dim vName, vDate, vNumber, vCurrency, sh, bk As Variant
'セルA2~D4の入力値を読み込み、それぞれのデータ型を
'イミディエイトウィンドウに表示する
For i = 1 To 4
Select Case Cells(1, i).Value
Case "品名"
vName = Cells(2, i).Value
Debug.Print "品名データ型:" _
& TypeName(vName)
Case "登録日"
vDate = Cells(2, i).Value
Debug.Print "登録日データ型:" _
& TypeName(vDate)
Case "数量"
vNumber = Cells(2, i).Value
Debug.Print "数量データ型:" _
& TypeName(vNumber)
Case "単価"
vCurrency = Cells(2, i).Value
Debug.Print "単価データ型:" _
& TypeName(vCurrency)
End Select
Next i
'ワークシートへの参照を変数shに代入
Set sh = Worksheets(1)
Debug.Print "シートのデータ型:" _
& TypeName(sh)
'ワークブックへの参照を変数に代入
Set bk = ActiveWorkbook
Debug.Print "ブックのデータ型:" _
& TypeName(bk)
End Sub
最初にVariant型で宣言しているのは、サンプルとしてデータ型を確認する目的なので敢えてこの形にしています。
セルに入力されたデータを準備したそれぞれの変数に代入し、TypeName関数で入力されたデータ型を取得してイミディエイトウィンドウに表示しています。
構文:TypeName(varname)
このTypeName関数は、変数の情報やオブジェクト、変数の種類を文字列で返してくれるもので、その戻り値については以下の通りとなっています。
≪TypeName関数が返す文字列≫
| 返す文字列 | 内容 |
| Workbook | ブック |
| Worksheet | ワークシート |
| Range | セル |
| Long | 長整数型(Long) |
| Double | 倍精度浮動小数点数型(Double) |
| Currency | 通貨型(Currency) |
| Date | 日付型(Date) |
| String | 文字列型(String) |
| Boolean | ブール型(Boolean) |
| Error | エラー値 |
| Empty | 未初期化 |
| Null | 無効な値 |
| Nothing | オブジェクトを参照していないオブジェクト変数 |
配列変数の場合、それぞれのデータ型を示す文字列の後ろに「()」が付けられますので、Long型であれば「Long()」となります。
◆VarType関数
Sub Sample2()
'変数はVariant型で宣言
Dim vName, vDate, vNumber, vCurrency As Variant
'セルA2~D4の入力値を読み込み、それぞれのデータ型を
'イミディエイトウィンドウに表示する
For i = 1 To 4
Select Case Cells(1, i).Value
Case "品名"
vName = Cells(2, i).Value
Debug.Print "品名データ型:" _
& VarType(vName)
Case "登録日"
vDate = Cells(2, i).Value
Debug.Print "登録日データ型:" _
& VarType(vDate)
Case "数量"
vNumber = Cells(2, i).Value
Debug.Print "数量データ型:" _
& VarType(vNumber)
Case "単価"
vCurrency = Cells(2, i).Value
Debug.Print "単価データ型:" _
& VarType(vCurrency)
End Select
Next i
End Sub
最初にVariant型で型宣言しているのはSample1と同様です。処理としても同じようにセルに入力されたデータを変数に代入して、VarType関数で変数のデータ型を取得しています。
構文:VarType(varname)
このVarType関数は変数の内部処理形式を表す整数型の値を返してくれるもので、戻り値については以下の通りとなっています。
| 定数 | 値 | 内容 |
| vbEmpty | 0 | Empty値(未初期化) |
| vbNull | 1 | Null値(無効な値) |
| vbInteger | 2 | 整数型(Integer) |
| vbLong | 3 | 長整数型(Long) |
| vbSingle | 4 | 単精度浮動小数点数型(Single) |
| vbDouble | 5 | 倍精度浮動小数点数型(Double) |
| vbCurrency | 6 | 通貨型(Currency) |
| vbDate | 7 | 日付型(Date) |
| vbString | 8 | 文字列型(String) |
| vbObject | 9 | オブジェクト |
| vbError | 10 | エラー値 |
| vbBoolean | 11 | ブール型(Boolean) |
| vbVariant | 12 | バリアント型(Variant)バリアント型配列のみに使用 |
| vbDataObject | 13 | データアクセスオブジェクト |
| vbDecimal | 14 | 10進値 |
| vbByte | 17 | バイト値 |
| vbLongLong | 20 | LongLong型整数(64ビットプラットフォーム上でのみ有効) |
| vbUserDefinedType | 36 | ユーザー定義型を含むバリアント |
| vbArray | 8192 | 配列 |
気に留めておきたい点として、VarType関数はvbArrayの値を単独で返さず、他のデータ型を表す値との合計値が返されます。
例として整数型の配列であれば、整数型vbInteger ⇒ 2 + vbArray ⇒ 8192なので、戻り値は8194になります。バリアント型の配列ならvbVariant⇒12+vbArray⇒8192で戻り値は8204となります。
3.まとめ
今回扱ったTypeName関数やVarType関数は意図するデータ型になっているかどうか等を判定することができますので、用途によっては有用なものです。
VBAで変数は何かと扱いますから、そのデータ型を確認したり判定する手段として知っておくと便利なので頭の片隅にでも置いておくと良いと思います。
以上、オブジェクト/変数の種類/変数のデータ型を確認する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

