TypeName

TypeName関数は変数やオブジェクトがどういう種類なのかを”Integer”や”Range”などの文字列で返します。

Integer型やRange型など種類が分かっていれば判定する必要がないため、何が設定されているのか分からない変数がTypeName関数を使う対象になります。

何が設定されているのか分からない変数は、全てのデータが格納できるVariant型か、オブジェクトであればなんでも格納できるObject型のため、これらの変数に対して判定を行うことになります。


構文

Function TypeName(VarName) As String

VarName 種類を調べたい変数を指定します。
戻り値String VarNameで指定した変数の種類を文字列で返します。



変数とオブジェクトの種類

変数型は10個程度ですが、オブジェクト型は無数にあります。

オブジェクト型については代表的なものを紹介します。

変数型

“Boolean” ブール型
“Byte” バイト型
“Integer” 整数型
“Long” 長整数型
“Single” 単精度浮動小数点数型
“Double” 倍精度浮動小数点数型
“Currency” 通貨型
“Date” 日付型
“String” 文字列型

オブジェクト型

“Range” セル範囲
“Workbook” ワークブック
“Workbooks” ワークブックコレクション
“WorkSheets” ワークシートコレクション
“WorkSheet” ワークシート
“FileSystemObject” FileSystemObjectクラス
“Object” オブジェクト
“Dictionary” Dictionaryクラス
“Chart” グラフ
“TextBox” ActiveXコントロールのテキストボックス
“CommandButton” ActiveXコントロールのコマンドボタン

その他

Error エラー値
Empty Variant型の初期値や未設定セルのRange型の値など
Null 演算が判定できない場合や無効な場合の値
UnKnown オブジェクトの種類が不明な場合
Nothing オブジェクト変数の初期値



TypeName関数の用途とサンプルコード

VBA単体で処理するようなコードの場合ではTypeName関数はあまり使う機会がないのですが、Excelシートの操作を行うようなコードを実行する場合に、結構重要な役割を果たします。

例えば、選択しているセルの色を付ける以下のようなコードがあったとします。

セル範囲を選択してこの関数を実行すると、選択セルの背景色を緑色にします。

ところが、シートにオートシェイプがあった場合にそれを選択していると、Selectionプロパティが指すのはオートシェイプになるため、SelectionプロパティのループでRangeオブジェクトへの代入ができずにエラーになります。

このように、後続の処理が正しく実行できるかどうかの判定をするためにTypeName関数を使うことが多いと思います。

ちなみに上のコードにTypeName関数を加えるとこんな感じになります。

Rangeオブジェクトの場合のみ後続の処理を動かすようにしています。



サンプルコード、その2

上記のコードではTypeName関数でRangeかどうかだけの判定でしたが、セルかオートシェイプ1つかオートシェイプ複数かの判定を行う場合は以下のような感じになります。

オートシェイプが1つの場合は”Rectangle”や”Line”などですが、複数の場合は”DrawingObjects”になります。