Excel VBAの「TypeName 関数」について解説します。
TypeName 関数とは
Excel VBA の TypeName 関数は、指定した引数のデータ型に関する情報「型名」を文字列(String)で返します。引数に変数を指定すれば、変数がどのようなデータ型であるかを簡単に確認することができます。
それでは、TypeName 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
TypeName 関数(Visual Basic for Applications リファレンス)
※ 型情報を「型を示す値(Integer)」で取得するには VarType 関数 を使用します。
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
TypeName(varname)
引数
引数 | 説明 |
---|---|
varname | 【必須】任意の変数または値(式)を指定します ※ ユーザー定義型の変数は指定できません |
※ ユーザー定義型の変数を直接引数にすると、実行時バインディングの制約によりコンパイルエラーが発生します。ただし、ユーザー定義型の各要素を個別に指定することは可能です。
戻り値
戻り値 | 説明 |
---|---|
型名(String) | 引数の情報「データ型名」を文字列で返します |
戻り値となる「型名」の一覧は次表のとおりです。
戻り値(型名)一覧の抜粋
オブジェクトなどは表示しきれないほどたくさんあるので代表的なものを抜粋しています。
データ種類 | 戻り値(文字列) | 説明(データ型名など) |
---|---|---|
データ | Byte | バイト型 |
データ | Integer | 整数型 |
データ | Long | 長整数型 |
データ | Single | 単精度浮動小数点数型 |
データ | Double | 倍精度浮動小数点数型 |
データ | Currency | 通貨型 |
データ | Decimal | 10進数型 |
データ | Date | 日付型 |
データ | String | 文字列型 |
データ | Boolean | 真偽値(ブール)型 |
データ | Error | 変数がエラー値を持っている場合 |
データ | Empty | Variant型変数がまだ値を持っていない場合 |
データ | Null | 有効な値がない Null値 の場合 |
オブジェクト | Range | Excelのセル範囲オブジェクト |
オブジェクト | Worksheet | Excelのワークシートオブジェクト |
オブジェクト | Sheets | Excelのワークシートコレクション |
オブジェクト | Workbook | Excelのワークブックオブジェクト |
オブジェクト | Workbooks | Excelのワークブックコレクション |
オブジェクト | Application | Excel.Application |
オブジェクト | Dictionary | Scripting.Dictionaryオブジェクト |
オブジェクト | FileSystemObject | FileSystemObjectクラス |
オブジェクト | Object | 一般的なオブジェクト |
オブジェクト | Nothing | オブジェクト変数が初期化されていない場合 |
オブジェクト | Unknown | オブジェクトの型を認識できない場合 |
配列 | Variant() | Variant の配列 |
配列 | Integer() | Integer の配列 |
配列 | String() | String の配列 |
配列 | Date() | Date の配列 |
※ 配列の場合、型名に空の括弧 () を付けた文字列が返されます。
解説(使用例)
以下、TypeName 使用例のサンプルコードです。
TypeName関数サンプル1(データ)
戻り値(型名)一覧のデータ種類が「データ」部分のサンプルです。
'■TypeName関数サンプル1(データ)
Sub TypeName_Sample01()
Dim var As Variant 'Variant型変数を用意
'Variant型変数Varが初期化されていない状態
Debug.Print TypeName(var) 'Empty
var = CByte(12)
Debug.Print TypeName(var) 'Byte
var = 12
Debug.Print TypeName(var) 'Integer
var = 1234567890
Debug.Print TypeName(var) 'Long
var = CSng(3.45)
Debug.Print TypeName(var) 'Single
var = 678901234567#
Debug.Print TypeName(var) 'Double
var = CCur(1234.5678)
Debug.Print TypeName(var) 'Currency
var = CDec(12345.67)
Debug.Print TypeName(var) 'Decimal
var = Now
Debug.Print TypeName(var) 'Date
var = "1234.5678"
Debug.Print TypeName(var) 'String
var = True
Debug.Print TypeName(var) 'Boolean
var = CVErr(5)
Debug.Print TypeName(var) 'Error
var = Null 'Variant型変数VarにNullを明示的に代入
Debug.Print TypeName(var) 'Null
End Sub
コードを実行したイミディエイト画像については省略します。コード内のコメント部分が戻り値です。
バリアント型(Variant)の変数については、さまざまなデータ型を内部型式で格納しています。そのため、 TypeName 関数が返すデータ型は内部型式名です。
また、バリアント型(Variant)の変数を宣言した直後の初期値は、内部型式はまだ存在しないので Empty が返されます。
TypeName関数サンプル2(オブジェクト)
戻り値(型名)一覧のデータ種類が「オブジェクト」のサンプルです。
'■TypeName関数サンプル2(オブジェクト)
Sub TypeName_Sample02()
Dim obj As Object 'オブジェクト変数を用意
'変数が初期化前に型を調べてみる
Debug.Print TypeName(obj) 'Nothing
Set obj = ActiveCell '初期化
Debug.Print TypeName(obj) 'Range
Set obj = Nothing '解放
Set obj = ActiveSheet
Debug.Print TypeName(obj) 'Worksheet
Set obj = Nothing
Set obj = Worksheets
Debug.Print TypeName(obj) 'Sheets
Set obj = Nothing
Set obj = ThisWorkbook
Debug.Print TypeName(obj) 'Workbook
Set obj = Nothing
Set obj = Workbooks
Debug.Print TypeName(obj) 'Workbooks
Set obj = Nothing
Set obj = Excel.Application
Debug.Print TypeName(obj) 'Application
Set obj = Nothing
Set obj = CreateObject("Scripting.Dictionary")
Debug.Print TypeName(obj) 'Dictionary
Set obj = Nothing
Set obj = CreateObject("Scripting.FileSystemObject")
Debug.Print TypeName(obj) 'FileSystemObject
Set obj = Nothing
End Sub
オブジェクトは、これら以外にもたくさんあります。
TypeName関数サンプル3(配列)
戻り値(型名)一覧のデータ種類が「配列」のサンプルです。
'■TypeName関数サンプル3(配列)
Sub TypeName_Sample03()
'Variantの配列
Dim var As Variant
var = Array(0, "1", 2)
Debug.Print TypeName(var) 'Variant()
Debug.Print TypeName(var(0)) 'Integer
Debug.Print TypeName(var(1)) 'String
'Integerの配列
Dim i(10) As Integer
Debug.Print TypeName(i) 'Integer()
'Stringの配列
Dim str(10) As String
str(0) = "あ"
Debug.Print TypeName(str) 'String()
Debug.Print TypeName(str(0)) 'String
End Sub
配列そのものと、配列の中にある各要素を(インデックス番号で)指定したサンプルです。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA TypeName 関数は、引数の情報から「データ型名」を取得する情報取得関数です。
TypeName 関数で変数のデータ型を調べ、その型名に応じて処理を分岐させるなどに利用されます。
別途解説する VarType 関数についても同じように利用されますが、戻り値が「型名」ではなく「型を示す値(Integer)」という違いがあります。状況に応じて使い分けします。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;