関数・メソッド

変数やオブジェクトの型を判別する【戻り値:文字列】【TypeName関数】【ExcelVBA】

構文

TypeName(varname)

varname・・・任意の「変数」・「オブジェクト」・「値」を指定します。
戻り値 ・・・文字列型 (String)
変数の情報やオブジェクト・変数の種類(データ型)を文字列で取得します。

戻り値の一覧

変数型はデータ型一覧にあるような形なのでわかりやすいです。
オブジェクト型になると無数にある為、代表的なものをご紹介します。

データ型種類文字列説明
変数型“Boolean”ブール型(Boolean)
“Byte”バイト型(Byte)
“Integer”整数型(Integer)
“Long”長整数型(Long)
“Single”単精度浮動小数点数型(Single)
“Double”倍精度浮動小数点数型(Double)
“Currency”通貨型(Currency)
“Date”日付型(Date)
“String”文字列型(String)
”Decimal”10進数型
オブジェクト型“Range”セル範囲
“Workbook”ワークブック
“Workbooks”ワークブックコレクション
“WorkSheets”ワークシートコレクション
“WorkSheet”ワークシート
“Dictionary”Dictionaryクラス
“TextBox”ActiveXコントロールのテキストボックス
“CommandButton”ActiveXコントロールのコマンドボタン
“Chart”グラフ
“FileSystemObject”FileSystemObjectクラス
“Object”オブジェクト
その他”Empty”未初期化のデータ
(Variant型やRange型等)
”Null”無効な値(演算が不明な場合など)
”UnKnown”オブジェクトの種類が不明
”Nothing”オブジェクトを参照していないオブジェクト
(オブジェクトの初期値)

コードサンプル

Public Sub test()
    Dim var As Variant
    
    '■通常の変数型
    var = True
    MsgBox TypeName(var) '"Boolean"
    
    var = 1000
    MsgBox TypeName(var) '"Integer"
    
    var = 1.1
    MsgBox TypeName(var) '"Double"
    
    var = "VBA-Create"
    MsgBox TypeName(var) '"String"
    
    var = Now
    MsgBox TypeName(var) '"Date"
            
    '■オブジェクト型
    Dim obj As Object
    MsgBox TypeName(obj) '"Nothing"
    
    Set obj = ThisWorkbook
    MsgBox TypeName(obj) '"Workbook"
    
    Set obj = Range("A1:A5")
    MsgBox TypeName(obj) '"Range"
    
    '■配列型
    var = Array(1, 2, 3, 4, 5)
    MsgBox TypeName(var) '"Variant()"
    
    Dim i(5) As Long
    MsgBox TypeName(i) '"Long()"
    
    Dim v() As Variant
    MsgBox TypeName(v) '"Variant()"
End Sub

注意点

  • 配列の場合は文字列の後に「()」を付与します。(String型の配列の場合→String())
  • 型情報を数値で判別する場合は「VarType 関数」を使用します。

使い方例

指定したデータ型が想定しているデータ型と違った場合、エラーが出る場合があります。
不具合発生させないための、エラー回避に使います。

  • マクロ側は整数値を想定しているが、ユーザーが小数点込みでデータ入力した。
  • Range型を選択したいのに、オートシェイプを選択していた。
  • 配列データで指定したはずが、配列になっていなかった。

関連記事

【VBA基本】変数のデータ型一覧
配列の宣言(静的/動的/1次元/2次元)【ExcelVBA】
配列かどうか調べる【IsArray関数】【ExcelVBA】
指定した要素で配列を作成【Array関数】【ExcelVBA】

コメント

タイトルとURLをコピーしました