和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セル値や変数が文字列(String)か判定する

セル値や変数、配列の中身が文字列か判定するには、
TypeName関数を使用します。

' セルの値が文字列だった時の処理
If TypeName(Range("A1").Value) = "String" Then
   ~~ここにセル値が文字列だった時の処理
End If

 
ただしTypeName関数は純粋に値のデータ型を判定するため、
"200"や"2025/4/1"などの文字列もTrueと判定します。


Excelのデータを取り込んだ場合は日付や数値も文字列であることがあるため、
特にCSVの処理などで「数値ではない純粋な文字列」を判定したい場合があります。

この時はIsNumeric関数IsDate関数による判定を加えて、
「数値でも日付でもない文字列」を判定してください。

' セルの値が日付や数値ではない文字列か判定
If TypeName(Range("A1").Value) = "String" Then
    If IsNumeric(Range("A1").Value) = False _
    And IsDate(Range("A1").Value) = False Then

 
逆に言えば、IsNumeric関数は"100"もTrueと判定します。

IsDate関数に至っては"4-1"も4月1日と解釈してTrueを返すため、
日付と取れてしまう文字列の処理には注意してください。


なお、TypeName関数の方が汎用的なためこちらで解説しましたが、
シート関数「ISTEXT」をWorksheetFunctionから呼ぶ方法もあります。

判定の仕様は全く同じようなので、好みでこちらを使ってもOKです。


他にはVarType関数の結果が「vbString」であるか判定する方法もあります。

If VerType(Range("A1").Value) = vbString Then

 
こちらもただコードを書くだけではほとんど差はありません。


ただし、イミディエイトウィンドウで

?VerType(調べたい変数)

こんな使い方をしたときは、
当然のことながらvbStringではなく「8」が表示されます。


返り値が数値だとそれが何を表すか定数リストを調べる必要が出てしまうので、
データの種類を調べる関数は「TypeName関数」で統一してしまってOKです。