VBA

データ型を調べる方法

記事内に商品プロモーションを含む場合があります

このページでわかること(結論)

データ型の確認方法を3つ照会します。
それぞれの使い方が分かります。

  • ローカルウインドウ(手軽、おすすめ)
  • TypeName関数
  • VarType関数

覚えること

  1. VBE→表示タブ→ローカルウインドウでローカルウインドウを表示させる
  2. ローカルウインドウの見方を覚える
  3. TypeName関数の使用方法(ローカルウインドウを使わない方法)
  4. VarType関数の使用方法(ローカルウインドウを使わない方法)

ローカルウインドウ

おそらく最も効率よく確認できる方法です。
以下のようなコードを書いてみます。

Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim i As Long
For i = 1 To 500
  ws.Cells(i, 1).Value = i
  ws.Cells(i, 2).Value = "test"
  ws.Cells(i, 3).Value = "2021/05/06"
Next

Dim maxRow As Long
Dim test1, test2, test3 As Variant
maxRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
Stop
test1 = ws.Cells(maxRow, 1).Value
test2 = ws.Cells(maxRow, 2).Value
test3 = ws.Cells(maxRow, 3).Value
End Sub

確認したいところにSTOPコードを入れておきます。
すると、マクロ実行(F5キー)しても一時停止しますので、
ステップイン(F8キー)で進めていくと、
ローカルウインドウに値と型が表示されます。

F5キーでマクロ実行し、STOPで一時停止したときのローカルウインドウ

ステップインで最後まで進めてみます。

それぞれ変数のデータ型が確認できます。

データ型を確認することができました。

多くの変数を同時に確認する必要があるときや、
変数の変化を確認する必要があるときは
効率的に仕事できます。

TypeName関数

構文:TypeName (値)

戻り値は文字列でデータの型を返してくれます。
変数だけでなく、
オブジェクト(ワークシートとかワークブックとか)の型も確認できます。

変数

文字列内容
Integer整数型
Long長整数
Single単精度浮動小数点型
Double倍精度浮動小数点型
Date日付型
String文字列型
Booleanブール型
Errorエラー型
EmptyVariant型の初期値
Null無効な値

オブジェクト

文字列内容
Workbookブック
Worksheetワークシート
Rangeセル
Chartグラフ
TextBoxテキストボックス
ComboBoxコンボボックス
ListBoxリストボックス
Objectオブジェクト
Unknown種類不明
Nothingオブジェクトの初期値

先ほどのモジュールにTypeName関数を足してみました。
イミディエイトウインドウで確認してみます。

Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim i As Long
For i = 1 To 500
  ws.Cells(i, 1).Value = i
  ws.Cells(i, 2).Value = "test"
  ws.Cells(i, 3).Value = "2021/05/06"
Next

Dim maxRow As Long
Dim test1, test2, test3 As Variant
maxRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
Stop
test1 = ws.Cells(maxRow, 1).Value
test2 = ws.Cells(maxRow, 2).Value
test3 = ws.Cells(maxRow, 3).Value

Debug.Print TypeName(test1)
Debug.Print TypeName(test2)
Debug.Print TypeName(test3)

End Sub

VarType関数

構文:varType(値)

TypeName関数と似ていますが、戻り値が数値です。

文字列内容
vbEmpty0Variant型の初期値
vbNull1Null値
vbInteger2整数型
vbLong3長整数型
vbSingle4単精度浮動小数点型
vbDouble5倍精度浮動小数点型
vbCurrency6通貨型
vbDate7日付型
vbString8文字列型
vbObject9オブジェクト
vbError10エラー型
vbBoolean11ブール型
vbVariant12バリアント型
vbDataObject13非OLEオートメーションオブジェクト
vbDecimal1410進数型
vbByte17バイト型
vbArray8192配列
Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim i As Long
For i = 1 To 500
  ws.Cells(i, 1).Value = i
  ws.Cells(i, 2).Value = "test"
  ws.Cells(i, 3).Value = "2021/05/06"
Next

Dim maxRow As Long
Dim test1, test2, test3 As Variant
maxRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
Stop
test1 = ws.Cells(maxRow, 1).Value
test2 = ws.Cells(maxRow, 2).Value
test3 = ws.Cells(maxRow, 3).Value

Debug.Print VarType(test1)
Debug.Print VarType(test2)
Debug.Print VarType(test3)

End Sub

まとめ

方法確認方法メリットデメリット
ローカルウインドウVBE画面デバッグしながら一気に確認できる。戻り値が得られないので、if文など分岐処理ができない。
TypeName関数戻り値(文字列)戻り値(文字列)を取得できる。確認効率が悪い。
VarTye関数戻り値(数値)戻り値(数値)を取得できる。確認効率が悪い。値の意味を覚えなければならない。

確認だけなら、ローカルウインドウ一択です。
しかし、戻り値が得られるTypeName関数やVarType関数も使い道はたくさんあります。

例えば、入力値がDate型か、Double型か、文字列型を判断することで入力をやり直すモジュール→作成中

入力値がDouble型の場合、文字列型に変換するモジュール→作成中

if文などに使えるのは強力ですね。
入力フォームを作ったり、データをきれいな状態に保つのに重宝します。