IsNumeric関数について
VBAのIsNumeric関数は値や変数が数値であるかの判定ができます。
システムやマクロにおいてユーザーからの入力を処理に利用するときは、受けとった値が数値に変換できるかを判定します。
判定結果は真偽値(Boolean)となるため、TrueまたはFalseで返します。
オンラインスクールで現役エンジニアのサポートがあるテックアカデミーがおすすめ。
スキマ時間に学べて仕事も保証。必ず副業、始められます。まずは無料でプログラミング体験
IsNumeric関数がつかえる場面
Inputメソッドや、Input関数をつかったマクロや、セルやユーザーフォームに入力された値を判定につかいます。
例えば、顧客情報を入力するユーザーフォームにおいて、電話やFAXの番号や郵便番号などの入力、または商品情報を入力するときの価格などの判定をして入力あやまりを予防できます。
また、セルに入力された値が数値であるかのチェックなどで利用することもできます。
数値以外を入力させたくないセルであった場合、マクロで予防していることが最善策と言えますが、すでに入力された値に対してチェックすることも可能です。
IsNumeric関数の使いかた
IsNumeric関数の構文と戻り値について紹介します。
IsNumeric関数の構文
構文
IsNumeric(値または変数)
※値または変数(expression)の指定は必須のため、省略した場合はエラーとなります。
IsNumeric関数の判定結果について
IsNumeric関数の結果は真偽値(Boolean)となるため、TrueまたはFalseが返ります。
指定した値や変数が数値である場合はTrue、それ以外と判定された場合Falseが返ってきます。なお、日付であった場合もFalseとなります。
IsNumeric関数の結果の一覧
No | 判定する値 | 説明 | 判定結果 (True or False) |
---|---|---|---|
1 | 123 | 数値 | True |
2 | -123 | 数値(負の数値) | True |
3 | “123” | 文字列で半角の数値 | True |
4 | “123” | 文字列で全角の数値 | True |
5 | “-123” | 文字列で全角の数値(符号は半角) | True |
6 | “ー123” | 文字列で全角の数値(符号も全角) | False |
7 | “あいう” | 文字列でひらがな | False |
8 | “アイウ” | 文字列でカタカナ | False |
9 | “一二三” | 文字列で漢数字 | False |
10 | “ⅠⅡⅢ” | 文字列でローマ数字 | False |
11 | “ABC” | 文字列でABC | False |
12 | “2024/1/31” | 日付(文字列) | False |
13 | #1/31/2024# | 日付 | False |
14 | “2024年1月31日” | 日付 | False |
15 | “12:12:12” | 時刻 | False |
16 | 空白 | False | |
17 | 0 | 数値の0 | True |
18 | ActiveSheet.Range(“A1”) | セルの座標(対象セルは空白) | True |
19 | ActiveSheet.Range(“A1”).Value | セルの座標(対象セルは空白)のValueプロパティ | True |
20 | ActiveSheet.Range(“A1”).Text | セルの座標(対象セルは空白)のTextプロパティ | False |
21 | True | 真偽値の「True」は-1とみなされるため数値として判定される | True |
22 | False | 真偽値の「False」は0とみなされるため数値として判定される | True |
24 | Empty | Emptyは0とみなされるため数値として判定される | True |
25 | Null | Null値 | False |
26 | 指定なし | 指定なし | エラー |
IsNumeric関数をつかったサンプルマクロ
つぎのサンプルマクロでは、IsNumeric関数をつかってユーザーから入力ボックスに入力された値が数値かどうか判定します。
IsNumeric関数で入力された値が数値かどうか判定する
サンプルマクロのVBAコード
Option Explicit
Sub IsNumeric_macro1()
'入力された値を代入する変数を宣言する
Dim User_Val As String
'InputBox関数でユーザーから入力された値を変数「User_Val」に代入する
User_Val = InputBox("5桁までの数値を入力してください", "数値を入力", 0)
If Len(User_Val) > 5 Then '入力された値が5文字よりも多い場合
MsgBox "5桁以上は入力できません", vbCritical + vbOKOnly, "入力不正通知"
Exit Sub 'マクロの動作を終了する
Else
If IsNumeric(User_Val) = True Then '入力された値が数値かどうかを判定する
MsgBox "入力された値は数値です。", vbInformation + vbOKOnly '数値である
Else
MsgBox "入力された値は数値ではありません。", vbCritical + vbOKOnly '数値ではない
End If
End If
End Sub
06行目
文字列型の変数としてUser_Valを宣言します。
09行目
InputBox関数でユーザーへ以下の入力画面を表示します。入力された値はUser_Valに代入します。

入力される文字列を制限する手段として、指定された範囲の値が入力されるまで入力画面をくり返し表示する方法もあります。また、InputBox関数をつかう方法以外にも、ユーザーからの入力に対する制限方法として、Application.InputBoxメソッドの引数である「Type」を指定する方法もあります。
11行目
Len関数をつかってUser_Valに代入された値の文字数を判定しています。サンプルマクロの場合、6文字以上かどうかでそのあとの処理が分岐します。
13行目と14行目
User_Valの6文字以上であれば、メッセージを表示を表示してマクロを終了します。
18行目
IsNumeric関数をつかってUser_Valに代入された値が数値であるか判定します。判定の結果によって表示するメッセージが変化します。
実行結果
IsNumeric関数の判定結果によって、以下のメッセージを表示します。
Trueだった場合

Falseだった場合

InputBox関数で指定範囲の値が入力されるまで入力画面を表示するマクロはこちらを参考にしてください。
Application.InputBoxメソッドの使いかたについては以前の記事をご覧ください。
Len関数などの文字列操作に便利な関数は以下の記事をご覧ください。
IsNumeric関数でセル上の値が数値かどうか判定する
続いてもうひとつサンプルマクロを紹介します。
こちらはエクセルのワークシート上に記録された表の数値を判定して、数値であれば全角文字を半角文字に置きかえて記入します。
サンプルマクロのVBAコード
Option Explicit
Sub IsNumeric_macro2()
'ワークシートに書かれた数値を半角に変更する
Dim Var As String 'セルの値を代入する変数
Dim i As Long 'くり返し用の変数
'作業対象シートをWithで指定する
With ThisWorkbook.Worksheets("対象シート")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row '最終行までくり返す
Var = .Cells(i, 1).Value 'A列の値を変数に代入
.Cells(i, 3) = IsNumeric(Var) '変数に代入した値が数値に変換できるかの判定結果をC列に記入する
If IsNumeric(Var) = True Then '数値にできる値であった場合
.Cells(i, 4) = StrConv(Var, vbNarrow) '半角数値に置換してD列に出力する
End If
Next i
End With
End Sub
06行目と07行目
変数Varとくり返し処理で使用する変数のiを宣言します。
10行目
コードを効率的に書くためにWithステートメントでシートオブジェクトを指定します。
13行目
変数VarにA列のセルの値を代入します。
14行目
IsNumeric関数で変数Varが数値に変換できる値であるか判定し、結果をC列に記入します。
16行目と17行目
IsNumeric関数で変数Varが数値に変換できる値であるか判定し、判定結果がTrueならStrConv関数で半角数値に置換してD列に記入します。
マクロの実行前と実行後の結果は以下のとおりです。
実行結果(実行前)
A列 | B列 | C列 | D列 | |
---|---|---|---|---|
1 | 判定する値 | 説明 | IsNumeric関数の判定 (True or False) |
StrConv関数の結果 |
2 | 空白のセル | |||
3 | 0 | 数値の0 | ||
4 | 123 | 数値 | ||
5 | -123 | 負の数値 | ||
6 | 123 | 全角の数値 | ||
7 | -123 | 全角の数値(符号は半角) | ||
8 | ー123 | 全角の数値(符号も全角) |
実行結果(実行後)
A列 | B列 | C列 | D列 | |
---|---|---|---|---|
1 | 判定する値 | 説明 | IsNumeric関数の判定 (True or False) |
StrConv関数の結果 |
2 | 空白のセル | FALSE | ||
3 | 0 | 数値の0 | TRUE | 0 |
4 | 123 | 数値 | TRUE | 123 |
5 | -123 | 負の数値 | TRUE | -123 |
6 | 123 | 全角の数値 | TRUE | 123 |
7 | -123 | 全角の数値(符号は半角) | TRUE | -123 |
8 | ー123 | 全角の数値(符号も全角) | FALSE |
C列にIsNumeric関数の判定結果(TRUEorFALSE)を入力しています。判定結果がTRUEになったものだけを対象にD列にA列の値を全角文字から半角文字に変換した結果を記入しています。変換の方法は、StrConv関数を利用しています。
こちらのサンプルマクロで利用している、くり返し処理や条件分岐は以下の記事で紹介しています。
詳しくはリンクより記事をご確認ください。
ForNextをつかってくり返しの処理を実行するマクロをつくるなら以下の記事をご覧ください。
If文をつかって条件に応じて処理を分岐するマクロをつくるなら以下の記事をご覧ください。
IsNumeric関数のような値や変数を判定する関数はほかにもある
IsNumeric関数は数値かどうかを判定する関数であることはお伝えしたとおりですが、同じようなはたらきをもつ関数として、ワークシート関数のIsNumber関数もあり、こちらも数値かどうかの判定をします。
IsNumeric関数と異なる点として、“123”のように文字列を判定した場合、IsNumeric関数では数値に変換できるものをTrueと判断することに対して、IsNumber関数ではFalseとなるなど判定結果が異なる部分があります。
IsNumeric関数は指定した値が数値にできるものであればTrueとなります。一方で、IsNumber関数は数値のみTrueの結果となるため、IsNumeric関数よりも判定基準が厳しいと言えます。そのため入力するものの厳格さによっては、ほかの入力制限をおこなう処理とあわせて利用していく必要がでてくるかもしれません。
例えば、ぜったいに半角の数値で入力してほしい場面で、全角の数値が入力されてもIsNumeric関数ではTrueと判断されることになりますが、これを許容できないのであれば、IsNumber関数で判定する、または全角で入力された数値を表などに記録するときの前処理として、全角文字を半角文字に変換するStrConv関数をつかうことで期待する結果を実現していくことになります。
そのほかの判定につかえる関数について
VBAには数値以外にも値や変数を判定する関数があります。関数名をクリックするとそちらの記事にジャンプします。
値や変数が配列であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数が日付であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数が初期値であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数がエラーであるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数にNullが含まれるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数がオブジェクトかどうかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント