はじめに
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 で指定できるのは以下の通りです。
値 | 説 明 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字列 |
4 | 論理値() |
8 | セル参照 |
16 | N/A などのエラー値 |
64 | 値の配列 |
上記プログラムで数値以外をInputoBoxに入力すると以下のような警告が出ます。
