• ベストアンサー

Excel VBAで、Application.InputBoxのキャンセルと入力値ゼロを区別したい。

VBA初心者です。 Application.InputBox(メソッド)で、キャンセルが選択されたら処理を終了し、数値が入力されたら計算をしたいのですが、ゼロを入力した場合にFalseと見なされて処理を終了してしまいます。ゼロを入力しても処理を続けるには、どのように記述すれば良いのでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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も分かります。

mumu001
質問者

お礼

なるほど!アドバイスを参考に記述したところ、目的とする結果が得られました。ありがとうございました。

その他の回答 (1)

回答No.1

0はFalseを数値で表した場合の値です。 逆にTrueは0以外です。 InputBox()は、OKですと、入力された値を返します。 キャンセルですと、空白文字を返します。 つまり、判定はTrue/Falseではなく、""かどうかという判定になります。 但し、OKを押した場合にも、入力値が無ければ""となります。

mumu001
質問者

お礼

Application.InputBoxと記述した場合にはExcel VBAのInputBoxメソッドを意味し、InputBoxと記述した場合にはVisual BasicのInputBox関数を意味すると理解しています。それぞれのキャンセルの意味は、 InputBoxメソッドのキャンセル=False=0 InputBox関数のキャンセル="" と言うことですね? 作成中のマクロでは、InputBoxメソッドを使用したいのですが・・・

関連するQ&A