InputoBoxで数値のみ入力

ユーザーフォーム

はじめに

 InputBoxは、ユーザーの入力した値を文字列で返しますので、数値を得たい場合は文字列が数値かどうか判断する必要があります。
 いくつかの方法を見ていきましょう。

IsNumeric を使う

 IsNumeric を使えば、文字列が数値かどうかを判断できます。数値の場合のみ処理を続行します。

Sub testInputBox1()
    Dim n As String
    
    n = InputBox("数値を入れてください。")
    
    If IsNumeric(n) Then        '数値がどうか判断する
        Range("B2") = CInt(n)
    Else
        MsgBox "数値ではないので中止します。"
    End If 
End Sub

On Error Resume Next を使う

 まず、On Error Resume Next でエラー発生を無効化しておきます。次に InputoBox からの値を CInt関数で数値に変換して数値型変数(num)に入れます。
 もし、キャンセルや数値(整数)でない文字列が入ってきた場合は、数値型変数(num)には初期値の 0 が入ることになります。

Sub testInputBox()
    Dim num As Long, i As Long
    
    On Error Resume Next
    
    num = CInt(InputBox("数値を入れてください。"))
    For i = 1 To num
        Cells(i, "A") = i
    Next i
    
End Sub

 On Error GoTo ラベル を使ってエラーの際処理をジャンプする事もできます。

Sub testInputBox3()
    Dim num As Long, i As Long
    
    On Error GoTo myError

    num = CInt(InputBox("数値を入れてください。"))
    For i = 1 To num
        Cells(i, "A") = i
    Next i
    
    Exit Sub
myError:
    MsgBox "数値ではないので中止します。"
End Sub

Application.InputBox を使う

  InputoBoxには、関数のInputoBox と Application.InputBox の2つがあります。Application.InputBox では、Typeという引数で値の型を指定できるので便利です。

Sub testInputBox4()
    Dim num As Long, i As Long
    
    num = Application.InputBox(prompt:="数値を入れてください。", Type:=1)
    For i = 1 To num
        Cells(i, "A") = i
    Next i
End Sub

Application.InputBox の Type で指定できるのは以下の通りです。

 説 明 
数式
数値
文字列
4論理値()
8セル参照
16N/A などのエラー値
64値の配列

 上記プログラムで数値以外をInputoBoxに入力すると以下のような警告が出ます。

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