セルの値が数値かどうか IsNumeric

初級VBA

値が数値化を判断するIsNumeric

 IsNumeric は、セルの値や、バリアント型の変数などが数値がどうかを判断する関数です。
引数の値が数値の場合、Trueを返し、それ以外は False を返します。

 引数の値が文字列だった場合でも、内容が全て数値の場合は、Trueを返します。

使い方

 IsNumelic は、True、False を返します。特徴としては、文字列でも数値と判断されれば True を返します。
基本的には文字列+数値の場合には False となります。ただ、\マークなどは含まれていても数値と判断されるようです。$マークはFalseとなりました。

Sub sample()
    Debug.Print IsNumeric(123)      'True
    Debug.Print IsNumeric(1.5)      'True
    Debug.Print IsNumeric("123")    'True
    Debug.Print IsNumeric("123") 'True
    Debug.Print IsNumeric("\200")   'True
    Debug.Print IsNumeric("$200")   'False
    Debug.Print IsNumeric("aaa")    'False
    Debug.Print IsNumeric("a100")   'False
    Debug.Print IsNumeric("2025/1/20")  'False
End Sub

 IsNumeric は、True、False を返す事から If文の条件式としてよく使われます。 

If文での使い方

 上記のようなシートがあった時、B列の値をIsNumelicに入力し、結果がTrueだった場合に、値を10倍してE列に書き込むプログラムを書いてみます。

Sub macro1()
    Dim i As Long
    For i = 4 To 12
        If IsNumeric(Cells(i, "B")) Then
            Cells(i, "E") = Cells(i, "B") * 10
        End If
    Next i
End Sub

 IsNumelicでは、値に数値以外の文字列が含まれる場合、False となります。ただし、\ や $ など書式設定で単位が付いている場合は、Trueを返し数値計算ができます。(表示が右寄せになっている事からもわかります。)

 また、数値のみの文字列は、半角でも全角でも数値と扱われ計算が可能です。これはExcelの仕様と思われますが、IsNumelicもTrueを返します。

 日付はFalseを返します。

 尚、前のプログラム sample() では、”$200″ が False を返していますが、これは文字列を代入しているからで、セルを判断する場合とは異なります。

 色々と例外がありますが、IsNumelic で True を返した場合は、数値計算ができると考えて良いでしょう。

まとめ

 IsNumelicは、以下のような特徴があります。

・数値以外が含まれる場合は、Falseを返す。(\ マークなどの例外あり)
・日付は、Falseを返す。
・数値のみの文字列は True を返す。
・セルの値を引数に取る場合は、書式設定を考慮する必要がある。
・IsNumelic で True を返した場合、数値計算が可能。

コメント

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