Excel VBAの「VarType 関数」について解説します。
VarType 関数とは
Excel VBA の VarType 関数は、指定した引数のデータ型を示す数値(Integer)を返します。関数の分類としては情報取得関数のひとつです。引数に変数を指定すれば、変数がどのようなデータ型であるかを簡単に確認することができます。
それでは、VarType 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
VarType 関数(Visual Basic for Applications リファレンス)
※ 型情報を「型名の文字列(String)」で取得するには TypeName 関数 を使用します。
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
VarType(varname)
引数
| 引数 | 説明 | 
|---|---|
| varname | 【必須】任意の変数または値(式)を指定します ※ ユーザー定義型の変数は指定できません | 
※ ユーザー定義型の変数を直接引数にすると、実行時バインディングの制約によりコンパイルエラーが発生します。ただし、ユーザー定義型の各要素を個別に指定することは可能です。
戻り値
| 戻り値 | 説明 | 
|---|---|
| 型を示す値 (Integer) | 引数の情報「データ型」を表す整数値で返します | 
戻り値は次表の定数値またはそれらの合計値です。
Variant型 の 内部型式一覧
| 戻り値 | VB定数 | TypeName | 説明 | 
|---|---|---|---|
| 0 | vbEmpty | Empty | データが空の状態 (未初期化) | 
| 1 | vbNull | Null | Null値 (無効なデータ) | 
| 2 | vbInteger | Integer | 整数型 (Integer) | 
| 3 | vbLong | Long | 長整数型 (Long) | 
| 4 | vbSingle | Single | 単精度浮動小数点数型 (Single) | 
| 5 | vbDouble | Double | 倍精度浮動小数点数型 (Double) | 
| 6 | vbCurrency | Currency | 通貨型 (Currency) | 
| 7 | vbDate | Date | 日付型 (Date) | 
| 8 | vbString | String | 文字列型 (String) | 
| 9 | vbObject | Object | オブジェクト | 
| 10 | vbError | Error | エラー値 | 
| 11 | vbBoolean | Boolean | ブール型 (Boolean) | 
| 12 | vbVariant | Variant | バリアント型 (Variant) | 
| 13 | vbDataObject | DataObject | データアクセスオブジェクト | 
| 14 | vbDecimal | Decimal | 10進数型 (Decimal) | 
| 17 | vbByte | Byte | バイト型 (Byte) | 
| 20 | vbLongLong | LongLong | LongLong型整数 (64ビット) | 
| 36 | vbUserDefinedType | User-defined | ユーザー定義型 | 
| 8192 | vbArray | Array | 配列 (他の定数値と組み合わす) | 
配列については次のように組み合わせて返されます。例えば、Integerの配列は 8194(2+8192)を返し、Variantの配列なら 8204(12+8192)を返します。Stringの配列は 8200(8+8192)です。
解説(使用例)
以下、VarType 関数の使用例サンプルコードです。
VarType関数サンプル1(データ)
「データ」が引数の戻り値「型名を示す数値(Integer)」を返すサンプルです。
'■VarType関数サンプル1(データ)
Sub VarType_Sample01()
  Dim var As Variant  'Variant型変数を用意
  'Variant型変数Varが初期化されていない状態
  Debug.Print VarType(var)   '0 = vbEmpty
  
  var = Null  'Variant型変数VarにNullを明示的に代入
  Debug.Print VarType(var)   '1 = vbNull
  
  var = 12
  Debug.Print VarType(var)   '2 = vbInteger
  
  var = 1234567890
  Debug.Print VarType(var)   '3 = vbLong
  
  var = CSng(3.45)
  Debug.Print VarType(var)   '4 = vbSingle
  
  var = 678901234567#
  Debug.Print VarType(var)   '5 = vbDouble
  
  var = CCur(1234.5678)
  Debug.Print VarType(var)   '6 = vbCurrency
  
  var = Now
  Debug.Print VarType(var)   '7 = vbDate
  
  var = "1234.5678"
  Debug.Print VarType(var)   '8 = vbString
  
  var = CVErr(5)
  Debug.Print VarType(var)   '10 = vbError
  
  var = True
  Debug.Print VarType(var)   '11 = vbBoolean
  
  var = CDec(12345.67)
  Debug.Print VarType(var)   '14 = vbDecimal
  
  var = CByte(12)
  Debug.Print VarType(var)   '17 = vbByte
End Subコードを実行したイミディエイト画像については省略します。コード内のコメント部分が戻り値です。
VarType関数サンプル2(オブジェクト)
戻り値が「9(vbObject)」を返すサンプルです。
'■VarType関数サンプル2(オブジェクト)
Sub VarType_Sample02()
  Dim obj As Object
  'ExcelのWorkbookオブジェクトを設定
  Set obj = ThisWorkbook
  'VarType関数を使用してデータ型を確認
  If VarType(obj) = vbObject Then
    MsgBox "obj はオブジェクト型です。VarType: " & VarType(obj)
  Else
    MsgBox "obj はオブジェクト型ではありません。VarType: " & VarType(obj)
  End If
  Set obj = Nothing 'オブジェクト開放
End Sub
VarType関数サンプル3(配列)
引数が「配列」の場合の戻り値を確認するサンプルです。
'■VarType関数サンプル3(配列)
Sub VarType_Sample03()
  'Variantの配列
  Dim var As Variant
  var = Array(0, "1", 2)
  Debug.Print VarType(var)  '8204 = 12 + 8192
                '12 = vbVariant ,8192 = 配列
  'Integerの配列
  Dim i(10) As Integer
  Debug.Print VarType(i)    '8194 = 2 + 8192
                '2 = vbInteger ,8192 = 配列
  'Stringの配列
  Dim str(10) As String
  str(0) = "あ"
  Debug.Print VarType(str)  '8200 = 8 + 8192
                '8 = vbString ,8192 = 配列
End Sub配列そのものの戻り値は、型を示す数値 に 配列を示す数値 (8192) を加算した値が返ります。
つまり「8192」以上の戻り値は「配列」で、「8192」をマイナスした値は型を表しているということです。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!







Excel VBA VarType 関数は、引数の情報から「データ型を示す値(Integer)」を取得する情報取得関数です。取得した「データ型を示す値(Integer)」に応じて処理を分岐させたりする際に利用します。
別途解説する TypeName 関数についても同じように利用されますが、戻り値が「型を表す整数値」ではなく「型名(String)」という違いがあります。状況に応じて使い分けしましょう。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;