PR

【VBA】オブジェクト/変数の種類/変数のデータ型を確認する

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
今回は変数の情報やオブジェクト、変数の種類を「文字列」で返してくれるTypeName関数と変数の内部処理形式を表す「整数型の値」を返すVarType関数について書いていこうと思います。用途は多くないと思いますが知っておくと便利です。

スポンサーリンク

1.サンプル概要

ワークシート上に入力されたデータに対して「TypeName関数」でデータ型の取得と、ワークシート/ワークブックについての型も取得し、イミディエイトウィンドウに表示します。

上の表内データとワークシート、ワークブックの型を取得して表示させたものが以下になります。

次に同じ表を使用して「VarType関数」で変数の内部処理形式を示す整数型の値を取得すると、下のようになります。

以上がサンプル概要になります。

2.サンプルコード

◆TypeName関数

Sub Sample1()

  '変数はVariant型で宣言
  Dim vName, vDate, vNumber, vCurrency, sh, bk As Variant
  
  'セルA2~D4の入力値を読み込み、それぞれのデータ型を
  'イミディエイトウィンドウに表示する
  For i = 1 To 4
    Select Case Cells(1, i).Value
       Case "品名"
         vName = Cells(2, i).Value
         Debug.Print "品名データ型:" _
         & TypeName(vName)
       Case "登録日"
         vDate = Cells(2, i).Value
         Debug.Print "登録日データ型:" _
         & TypeName(vDate)
       Case "数量"
         vNumber = Cells(2, i).Value
         Debug.Print "数量データ型:" _
         & TypeName(vNumber)
       Case "単価"
         vCurrency = Cells(2, i).Value
         Debug.Print "単価データ型:" _
         & TypeName(vCurrency)
    End Select
  Next i

  'ワークシートへの参照を変数shに代入
  Set sh = Worksheets(1)
  Debug.Print "シートのデータ型:" _
         & TypeName(sh)

  'ワークブックへの参照を変数に代入
  Set bk = ActiveWorkbook
  Debug.Print "ブックのデータ型:" _
         & TypeName(bk)

End Sub

最初にVariant型で宣言しているのは、サンプルとしてデータ型を確認する目的なので敢えてこの形にしています。

セルに入力されたデータを準備したそれぞれの変数に代入し、TypeName関数で入力されたデータ型を取得してイミディエイトウィンドウに表示しています。

構文:TypeName(varname)

このTypeName関数は、変数の情報やオブジェクト、変数の種類を文字列で返してくれるもので、その戻り値については以下の通りとなっています。

≪TypeName関数が返す文字列≫

返す文字列 内容
Workbook ブック
Worksheet ワークシート
Range セル
Long 長整数型(Long)
Double 倍精度浮動小数点数型(Double)
Currency 通貨型(Currency)
Date 日付型(Date)
String 文字列型(String)
Boolean ブール型(Boolean)
Error エラー値
Empty 未初期化
Null 無効な値
Nothing オブジェクトを参照していないオブジェクト変数

配列変数の場合、それぞれのデータ型を示す文字列の後ろに「()」が付けられますので、Long型であれば「Long()」となります。

◆VarType関数

Sub Sample2()

  '変数はVariant型で宣言
  Dim vName, vDate, vNumber, vCurrency As Variant
  
  'セルA2~D4の入力値を読み込み、それぞれのデータ型を
  'イミディエイトウィンドウに表示する
  For i = 1 To 4
    Select Case Cells(1, i).Value
       Case "品名"
         vName = Cells(2, i).Value
         Debug.Print "品名データ型:" _
         & VarType(vName)
       Case "登録日"
         vDate = Cells(2, i).Value
         Debug.Print "登録日データ型:" _
         & VarType(vDate)
       Case "数量"
         vNumber = Cells(2, i).Value
         Debug.Print "数量データ型:" _
         & VarType(vNumber)
       Case "単価"
         vCurrency = Cells(2, i).Value
         Debug.Print "単価データ型:" _
         & VarType(vCurrency)
    End Select
  Next i

End Sub

最初にVariant型で型宣言しているのはSample1と同様です。処理としても同じようにセルに入力されたデータを変数に代入して、VarType関数で変数のデータ型を取得しています。

構文:VarType(varname)

このVarType関数は変数の内部処理形式を表す整数型の値を返してくれるもので、戻り値については以下の通りとなっています。

定数 内容
vbEmpty 0 Empty値(未初期化)
vbNull 1 Null値(無効な値)
vbInteger 2 整数型(Integer)
vbLong 3 長整数型(Long)
vbSingle 4 単精度浮動小数点数型(Single)
vbDouble 5 倍精度浮動小数点数型(Double)
vbCurrency 6 通貨型(Currency)
vbDate 7 日付型(Date)
vbString 8 文字列型(String)
vbObject 9 オブジェクト
vbError 10 エラー値
vbBoolean 11 ブール型(Boolean)
vbVariant 12 バリアント型(Variant)バリアント型配列のみに使用
vbDataObject 13 データアクセスオブジェクト
vbDecimal 14 10進値
vbByte 17 バイト値
vbLongLong 20 LongLong型整数(64ビットプラットフォーム上でのみ有効)
vbUserDefinedType 36 ユーザー定義型を含むバリアント
vbArray 8192 配列

気に留めておきたい点として、VarType関数はvbArrayの値を単独で返さず、他のデータ型を表す値との合計値が返されます。

例として整数型の配列であれば、整数型vbInteger ⇒ 2 + vbArray ⇒ 8192なので、戻り値は8194になります。バリアント型の配列ならvbVariant⇒12+vbArray⇒8192で戻り値は8204となります。

3.まとめ

今回扱ったTypeName関数やVarType関数は意図するデータ型になっているかどうか等を判定することができますので、用途によっては有用なものです。



VBAで変数は何かと扱いますから、そのデータ型を確認したり判定する手段として知っておくと便利なので頭の片隅にでも置いておくと良いと思います。

以上、オブジェクト/変数の種類/変数のデータ型を確認する方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

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