本ページには広告が含まれています。

ExcelVBA TypeName関数 変数の型名を返します

ExcelVBA TypeName関数 変数の型名(String)を返します

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通貨型
データDecimal10進数型
データDate日付型
データString文字列型
データBoolean真偽値(ブール)型
データError変数がエラー値を持っている場合
データEmptyVariant型変数がまだ値を持っていない場合
データNull有効な値がない Null値 の場合
オブジェクトRangeExcelのセル範囲オブジェクト
オブジェクトWorksheetExcelのワークシートオブジェクト
オブジェクトSheetsExcelのワークシートコレクション
オブジェクトWorkbookExcelのワークブックオブジェクト
オブジェクトWorkbooksExcelのワークブックコレクション
オブジェクトApplicationExcel.Application
オブジェクトDictionaryScripting.Dictionaryオブジェクト
オブジェクトFileSystemObjectFileSystemObjectクラス
オブジェクト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

配列そのものと、配列の中にある各要素を(インデックス番号で)指定したサンプルです。

おわりに

Excel VBA TypeName 関数は、引数の情報から「データ型名」を取得する情報取得関数です。

TypeName 関数で変数のデータ型を調べ、その型名に応じて処理を分岐させるなどに利用されます。

別途解説する VarType 関数についても同じように利用されますが、戻り値が「型名」ではなく「型を示す値(Integer)」という違いがあります。状況に応じて使い分けします。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!