大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、文字列や数値、数式かどうかを判定するには、IsText関数、TypeName、IsNumber関数、IsNumber、IsNumerical、IsFormula、HasFormula、Leftを使います。文字列や数値、数式を判定する方法について、マスターしていきましょう。

はじめに

この記事では、文字列や数値、数式を判定する方法について、ご紹介します。

「文字列」の判定は、次の2つがあります。

  • IsText関数
  • TypeName

「数値」の判定は、次の2つです。

  • IsNumber関数
  • IsNumber

「数値もしくは数値文字列」の判定は、下記を使います。

  • IsNumerical

「数式」の判定は、次の3種類があります。

  • IsFormula関数 ←セルで判定
  • HasFormula ←セルで判定
  • Left ←値で判定

「IsFormula関数」と「HasFormula」は、セルで数式を判定しますので、「値」で数式の判定をしたいという場合は、「Left」を使えます。

値の種類の判定について、マスターしていきましょう。

では、文字列や数値、数式を判定する方法について、解説していきます。

この記事を読むメリット

  • VBAで文字列や数値、数式の判定ができるようになります。

本記事の内容を動画でまとめています

目次

VBAコードまとめ

値の種類の判定をするVBAコードについて、まとめています。

VBAコードのみ確認したい場合に、ご活用ください。

'文字列の判定
Debug.Print WorksheetFunction.IsText("ABC") 'True
Debug.Print WorksheetFunction.IsText(123) 'False

Debug.Print TypeName("ABC") = "String" 'True
Debug.Print TypeName(123) = "String" 'False

'数値の判定
Debug.Print WorksheetFunction.IsNumber(123) 'True
Debug.Print WorksheetFunction.IsNumber("456") 'False

'数値もしくは数値文字列の判定
Debug.Print IsNumeric(123) 'True
Debug.Print IsNumeric("456") 'True

'数式の判定
セル = WorksheetFunction.IsFormula(Range("A6")) '「="123"」:True
セル = Range("A6").HasFormula '「="123"」:True
Debug.Print Left("=123", 1) = "=" 'True

では、解説していきます。

文字列かを判定する

文字列かを判定してみます。

WorksheetFunctionで、「IsText関数」を使う方法と、「TypeName」を使う方法があります。

IsText関数を使う

IsText関数を使って、文字列かを判定するVBAコードです。

Sub TEST1()
  
  '文字列かの判定
  Debug.Print WorksheetFunction.IsText("ABC") 'True
  Debug.Print WorksheetFunction.IsText(123) 'False
  Debug.Print WorksheetFunction.IsText("456") 'True
  
End Sub

実行すると、文字列の場合に「True」となります。

文字列の判定ができた

文字列かを判定できました

文字列かを判定できました。

TypeNameを使う

同じように「TypeName」を使って、文字列の判定をすることができます。

Sub TEST2()
  
  '文字列かの判定
  Debug.Print TypeName("ABC") = "String" 'True
  Debug.Print TypeName(123) = "String" 'False
  Debug.Print TypeName("456") = "String" 'True
  
End Sub

値の種類が、「"String"」の場合に「True」となります。

文字列の判定ができた

文字列かを判定できました

文字列かを判定できました。

文字列のみを取り出す

「TypeName」を使えば、文字列のみを取り出すことができます。

Sub TEST3()
  
  Dim A
  ReDim A(1 To 3)
  A(1) = "ABC"
  A(2) = 123
  A(3) = "456"
  
  '文字列だけを取り出す
  For i = 1 To UBound(A)
    If TypeName(A(i)) = "String" Then
      Debug.Print A(i)
    End If
  Next
  
End Sub

では、実行してみます。

配列の値から、文字列のみを取り出せます。

文字列のみを取り出せた

配列の値から、文字列のみを取り出せました

配列の値から、文字列のみを取り出せました。

数値かを判定する

数値かを判定してみます。

IsNumber関数を使う

数値の判定は、WorksheetFunctionで、「IsNumber関数」を使うとできます。

Sub TEST4()
  
  '数値かの判定
  Debug.Print WorksheetFunction.IsNumber("ABC") 'False
  Debug.Print WorksheetFunction.IsNumber(123) 'True
  Debug.Print WorksheetFunction.IsNumber("456") 'False
  
End Sub

判定する値が、数値の場合に「True」となります。

数値の判定ができた

数値かを判定できました

結果は、「123」のみが「True」となりました。

うまく数値の判定ができています。

数値のみを取り出す

「IsNumber関数」を使えば、数値のみを取り出すことができます。

Sub TEST5()
  
  Dim A
  ReDim A(1 To 3)
  A(1) = "ABC"
  A(2) = 123
  A(3) = "456"
  
  '数値だけを取り出す
  For i = 1 To UBound(A)
    If WorksheetFunction.IsNumber(A(i)) Then
      Debug.Print A(i)
    End If
  Next
  
End Sub

では、実行してみます。

数値のみを取り出せた

数値のみを取り出せました

数値の「123」のみを取り出せました。

数値文字列である「"456"」は取り出されません。

こんな感じで、うまく数値のみを取り出すことができました。

数値もしくは数値文字列を判定する

次は、数値もしくは数値文字列を判定してみます。

「123」や「"456"」を「True」として判定したい、ということになります。

IsNumericを使う

数値もしくは数値文字列の判定は、「IsNumeric」を使うとできます。

Sub TEST6()
  
  '数値もしくは数値文字列の判定
  Debug.Print IsNumeric("ABC") 'False
  Debug.Print IsNumeric(123) 'True
  Debug.Print IsNumeric("456") 'True
  
End Sub

実行してみます。

数値もしくは数値文字列の判定ができた

数値もしくは数値文字列かを判定できました

結果は、「123」と「"456"」が「True」となりました。

数値もしくは数値文字列であるかの判定ができています。

数値もしくは数値文字列のみを取り出す

「IsNumeric」を使って、数値もしくは数値文字列のみを取り出してみます。

Sub TEST7()
  
  Dim A
  ReDim A(1 To 3)
  A(1) = "ABC"
  A(2) = 123
  A(3) = "456"
  
  '数値もしくは数値文字列のみを取り出す
  For i = 1 To UBound(A)
    If IsNumeric(A(i)) Then
      Debug.Print A(i)
    End If
  Next
  
End Sub

実行してみます。

数値もしくは数値文字列のみを取り出せた

数値もしくは数値文字列を取り出せました

「123」と「"456"」を取り出せました。

数値もしくは数値文字列を取り出せています。

数式かを判定する

次は、「数式」かを判定してみます。

やり方としては、「セル」で判定する方法と、「値」で判定する方法があります。

IsFormula関数を使う

セルに入力されている値が数式かを判定したい場合は、WorksheetFunctionで、「IsFormula関数」を使うとできます。

Sub TEST8()
  
  '数式かの判定
  Range("A2").Offset(0, 3) = WorksheetFunction.IsFormula(Range("A2")) '「123」:False
  Range("A4").Offset(0, 3) = WorksheetFunction.IsFormula(Range("A4")) '「"123"」:False
  Range("A6").Offset(0, 3) = WorksheetFunction.IsFormula(Range("A6")) '「="123"」:True
  
End Sub

実行してみます。

セルで数式の判定ができた

数式かを判定できました

一番したのセルに数式が入力されているので、「True」となりました。

うまく数式かを判定できました。

HasFormulaを使う

セルに入力された値が数式かを判定するには、「HasFormula」を使うという方法もあります。

Sub TEST9()
  
  '数式かの判定
  Range("A2").Offset(0, 3) = Range("A2").HasFormula '「123」:False
  Range("A4").Offset(0, 3) = Range("A4").HasFormula '「"123"」:False
  Range("A6").Offset(0, 3) = Range("A6").HasFormula '「="123"」:True
  
End Sub

では、実行してみます。

セルで数式の判定ができた

数式かを判定できました

先ほど同じで、一番下のセルに数式が入力されていますので、「True」となりました。

うまく数式かを判定できています。

Leftを使う

セルに入力された値ではなく、「値」に対して数式の判定をしたいという場合には、「Left」が使えます。

最初の1文字目を「"="」であるかを確認する、という方法になります。

Sub TEST10()
  
  '数式かの判定
  Debug.Print Left(123, 1) = "=" 'False
  Debug.Print Left("123", 1) = "=" 'False
  Debug.Print Left("=123", 1) = "=" 'True
  
End Sub

では、VBAコードを実行してみます。

値で数式の判定ができた

数式かを判定できました

結果は、「"=123"」のみが「True」となりました。

うまく数式かを判定できています。

数式のみを取り出す

「Left」を使って、数式のみを取り出してみます。

Sub TEST11()
  
  Dim A
  ReDim A(1 To 3)
  A(1) = 123
  A(2) = "123"
  A(3) = "=123"
  
  '数式のみを取り出す
  For i = 1 To UBound(A)
    If Left(A(i), 1) = "=" Then
      Debug.Print A(i)
    End If
  Next
  
End Sub

では、実行してみます。

数式のみを取り出せた

数式のみを取り出せました

「"=123"」のみを取得できました

うまく数式のみを取り出せています。

おわりに

この記事では、文字列や数値、数式を判定する方法について、ご紹介しました。

「文字列」の判定は、次の2つがあります。

  • IsText関数
  • TypeName

「数値」の判定は、次の2つです。

  • IsNumber関数
  • IsNumber

「数値もしくは数値文字列」の判定は、下記を使います。

  • IsNumerical

「数式」の判定は、次の3種類があります。

  • IsFormula関数 ←セルで判定
  • HasFormula ←セルで判定
  • Left ←値で判定

「IsFormula関数」と「HasFormula」は、セルで数式を判定しますので、「値」で数式の判定をしたいという場合は、「Left」を使えます。

値の種類の判定について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す