ExcelVBA(マクロ)で文字列・数値・日付など、対象のデータ型を取得・判定する方法/TypeName関数の使い方

knowledge IT

VBAで文字列や数字が入力された場合に分岐する、あるいは対象のデータ型を知りたい場合などは、TypeName関数というものを使います。

スポンサーリンク

TypeName関数の使い方

対象のデータ形式を判定
Typename(引数)
typenamestring7
TypeNameは、引数のデータ型を返す関数です。
たとえばMsgBox TypeName(ActiveCell.Value)というマクロを実行すると……。
typenamestring8
こんな感じで、選んでいるセルのデータ型が表示されます。
typenamestring1
少し手を加えて条件分岐してみましょう。A列を判定し、文字列であればB列にその旨表記するマクロを作ります。
typenamestring2
VBEを開き、For文の中でもしTypeName(Range(“A” & i).Value) = “String”であれば処理を行う、という式を入力します。
typenamestring3
処理の実行結果です。アルファベットや日本語はStringとして判定され、数字や日付は無視されました。
typenamestring4
なお、StringのSは大文字で書く必要があります。stringのように書いた場合は何も起こりません。
' vba
For i = 2 To 5
If TypeName(Range("A" & i).Value) = "String" Then
Range("B" & i).Value = "文字列です"
End If
Next

色々なデータ型の判定

typenamestring5
TypeName関数では、String以外にも数値(Double)、日付(Date)、エラー(Error)などを確認・判定できます。
日付はIsDate、数値はIsNumeric、空白はIsEmptyという専用の関数が他にあり、そちらではTrue、Falseを返すので、処理に応じて使い分けます。
typenamestring6
実行結果です。
' vba
For i = 2 To 5
Select Case TypeName(Range("A" & i).Value)
Case "String"
Range("B" & i).Value = "文字列です"
Case "Double"
Range("B" & i).Value = "数値です"
Case "Date"
Range("B" & i).Value = "日付です"
Case "Error"
Range("B" & i).Value = "エラーです"
End Select
Next
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント