IsNumeric関数の使い方
マクロで数値かどうかを調べるときはIsNumeric関数を使用します。
読み方はいずにゅーめりっくだそうです。(なんとなくいすぬーめりっくと読んでいた。。)
値が数値の場合はtrueを返し、数値でない場合はfalseを返します。
ループ処理でセルの値が数値かどうか調べる方法
使用例として、エクセルシートのA列に入力されているセルの値を順番に調べて、結果をB列に書き出す処理を実行してみます。
サンプルマクロで実行している内容
①Forループで1行目~5行目まで繰り返す
②A列のセルの値が数値かどうか調べる
③数値の場合はB列に「数値です」と出力する
④数値ではない場合はB列に「数値ではありません」と出力する
Sub sample1()
'1行目~5行目まで調べる…⓵
For i = 1 To 5
'A列の値が数値の場合…⓶
If IsNumeric(Cells(i, 1)) = True Then
'B列に結果を出力…⓷
Cells(i, 2) = "数値です"
'数値ではない場合
Else
'B列に結果を出力…⓸
Cells(i, 2) = "数値ではありません"
End If
Next
End Sub
「If IsNumeric(Cells(i, 1)) = True Then」は「If IsNumeric(Cells(i, 1)) Then」と「=True」を省略しても大丈夫です。
マクロ実行前⇒マクロ実行後の状態です。
<実行結果>
1行目(ひらがな「あいうえお」):数値ではありません
2行目(アルファベット「ABC」):数値ではありません
3行目(数値「123」):数値です
4行目(数値「1.5」):数値です
5行目(日付「4月1日」):数値ではありません
※5行目の日付はシリアル値で入力しているので書式を数値にすれば数値になりますが、書式を日付型で設定している場合は日付とみなされます。
インプットボックスに入力された値が数値かどうか判定する方法
次はインプットボックスに入力された値が数値かどうかを判定する方法について説明します。
サンプルマクロで実行している内容
①インプットボックスを表示してユーザーに値を入力してもらう
②入力された値が数値かどうか調べる
③数値の場合は「数値が入力されました。」のメッセージボックスが表示される。
④数値ではない場合は「数値を入力してください。」のメッセージボックスが表示される。
Sub sample2()
Dim InputValue As Variant
'インプットボックスに値を入力してもらう…⓵
InputValue = Application.InputBox(Prompt:="好きな数値を入力してください")
'入力された値が数値かどうか調べる…⓶
If IsNumeric(InputValue) Then
'数値の場合…⓷
MsgBox "数値が入力されました。", vbInformation, "確認結果"
Else
'数値ではなかった場合…⓸
MsgBox "数値を入力してください。", vbCritical, "確認結果"
End If
End Sub
マクロを実行すると次のようになります。
左側は「50」と入力されたので「数値が入力されました。」と表示されました。
右側は「あいうえお」と入力されたので「数値を入力してください」が表示されました。
ユーザーが入力した値を使用して処理をする場合は、入力された値の形式が正しいかどうかチェックをして処理に進むことが大事です。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。