- ベストアンサー
Excel VBAで、Application.InputBoxのキャンセルと入力値ゼロを区別したい。
VBA初心者です。 Application.InputBox(メソッド)で、キャンセルが選択されたら処理を終了し、数値が入力されたら計算をしたいのですが、ゼロを入力した場合にFalseと見なされて処理を終了してしまいます。ゼロを入力しても処理を続けるには、どのように記述すれば良いのでしょうか?よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでは Sub aaa() Dim ret As String ret = Application.InputBox("数字を入力下さい", , , , , , , 2) If ret = "" Then MsgBox "何も入力されていません" ElseIf ret = "False" Then MsgBox "キャンセルボタンが押されました" ElseIf ret = "0" Then MsgBox "0が入力されました" ElseIf IsNumeric(ret) = False Then MsgBox "文字が入力されてします" & vbCrLf & ret Else MsgBox "数字です" & vbCrLf & ret debug.print val(ret) End If End Sub 戻り値 Retを数字として受けるのではなく文字で受ければFalseも分かります。
その他の回答 (1)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
0はFalseを数値で表した場合の値です。 逆にTrueは0以外です。 InputBox()は、OKですと、入力された値を返します。 キャンセルですと、空白文字を返します。 つまり、判定はTrue/Falseではなく、""かどうかという判定になります。 但し、OKを押した場合にも、入力値が無ければ""となります。
お礼
Application.InputBoxと記述した場合にはExcel VBAのInputBoxメソッドを意味し、InputBoxと記述した場合にはVisual BasicのInputBox関数を意味すると理解しています。それぞれのキャンセルの意味は、 InputBoxメソッドのキャンセル=False=0 InputBox関数のキャンセル="" と言うことですね? 作成中のマクロでは、InputBoxメソッドを使用したいのですが・・・
お礼
なるほど!アドバイスを参考に記述したところ、目的とする結果が得られました。ありがとうございました。