エクセル2010です。
InputBoxについて教えてください。
負数以外の数値を受け取りたいのです。
以下のようにやってみました。
Sub test001()
Dim ans As Double
ans = Application.InputBox("数値を入力", Type:=1)
If ans = False Then
MsgBox "キャンセル"
Exit Sub
ElseIf ans < 0 Then
MsgBox "負数は不可。"
Call test
Else
MsgBox ans & "を受け取りました。"
End If
End Sub
一応、これで動くのですが、問題は数値0を入力された場合です。
0はFalseと認識されるようで、キャンセルとなってしまいます。0は0という数値で受け取りたいのです。
試行錯誤の結果、Type:=1をやめ、変数ansをVariantにして
If ans = “False” Then と、Falseをダブルクォーテーションでくくると、0を数値としてくれるようです。でも理屈がわかりません。変数ansにキャンセルボタンで帰ってくるのはBooleanのFalseであり、Stringの”False”ではないと思うのですが。
Sub test002()
Dim ans
ans = Application.InputBox("数値を入力")
If ans = "False" Then
MsgBox "キャンセル" & TypeName(ans)
Exit Sub
ElseIf ans = "" Then
MsgBox "未入力" & TypeName(ans)
Call test002
ElseIf Not IsNumeric(ans) Then
MsgBox "数値ではありません。" & TypeName(ans)
Call test002
ElseIf ans < 0 Then
MsgBox "負数は不可。" & TypeName(ans)
Call test002
Else
MsgBox ans & "を受け取りました。" & TypeName(ans)
End If
End Sub
あと、もうひとつ質問は、数値以外の入力があった場合、再度入力させるためいちいちCall test002 を入れてますが、このやり方でただしいのでしょうか?
No.2ベストアンサー
- 回答日時:
こんばんは。
たぶん、もうお気づきかとは思いますが、一応念のため。
このコードの正式な書き方は分かりません。ただ、プログラムの歴史の中で、こういうスタイルで構造化プログラムができるようになって、環境が激変したというそうです。
'//
Sub Test003r()
Dim ans As Variant
Dim msg As String
Do
ans = Application.InputBox("数値を入力" & vbCr & msg)
If VarType(ans) = vbBoolean Then '←あくまでも、InputBox の次に置きます。
MsgBox "キャンセル"
Exit Sub
End If
If IsNumeric(ans) And Val(ans) >= 0 Then Exit Do
msg = "正しい数値(>=0)を入れてください。"
Loop
If ans <> "" Then
MsgBox ans
End If
End Sub
'//
そうか!分かりました。
ここでもキャンセルのFalseが0と認識されて
Val(ans) >= 0 Then Exit Doではじかれたんですね。
WindFaller さん、何度もありがとうございます。
No.1
- 回答日時:
こんにちは。
>数値以外の入力があった場合、再度入力させるためいちいちCall test002
それぞれの人のテクニックだけれども、InputBox 側で、データ型を指定するのはやめて、以下のようにしたらどうかと思います。以下は正しいのかは知りませんが、こんな感じだったような記憶があります。
'//
Sub Test003()
Dim ans As Variant
Dim msg As String
Do
ans = Application.InputBox("数値を入力" & vbCr & msg)
If IsNumeric(ans) And Val(ans) > 0 Then Exit Do
msg = "正しい数値(>0)を入れてください。"
If VarType(ans) = vbBoolean Then Exit Sub
Loop
If ans <> "" Then
MsgBox ans
End If
End Sub
'//
>再度入力させるためいちいちCall test002 を入れてますが、このやり方でただしいのでしょうか?
これは、何かの本で読んだかプログラミングの講座で聞いた覚えがあります。
そういうやり方は、古いやり方で、現代のプログラミングでは向かないそうです。
さっそくありがとうございました。
なるほど、Loopさせるわけですね。
ところで、キャンセル時にメッセージをだそうと、以下のようにやってみたのですが、MsgBox "キャンセル"が出てくてません。どうしてでしょう?
Sub Test003()
Dim ans As Variant
Dim msg As String
Do
ans = Application.InputBox("数値を入力" & vbCr & msg)
If IsNumeric(ans) And Val(ans) >= 0 Then Exit Do
If VarType(ans) = vbBoolean Then
MsgBox "キャンセル"
Exit Sub
End If
msg = "正しい数値(>=0)を入れてください。"
Loop
If ans <> "" Then
MsgBox ans
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで英数大文字のみの入...
-
マンション名のローマ数字入力...
-
Apple IDの作成ができない。「...
-
inputとenterの違い
-
エクセルVBAでTargetのセルに設...
-
左向きにエクセルで作成され申...
-
Excelにて入力済セルへの再入力...
-
スペイン語をxp、日本語キーボ...
-
エクセルVBA、入力しないと閉じ...
-
ATOKでエクセルに入力できない
-
エクセルで音声入力がしたい。
-
至急 奨学金のスカラネットで識...
-
カスペルスキーのダウンロード...
-
コマンドプロンプト表示が一瞬...
-
【キーボード】母音しか打てない…
-
エクセルマクロ セルをクリック...
-
エクセルで10進法から60進法に...
-
Windows10 IME 変換候補の順番...
-
最大値のあるセルの行番号のみ...
-
キーボードを無効にする方法。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで英数大文字のみの入...
-
マンション名のローマ数字入力...
-
Apple IDの作成ができない。「...
-
認証コードが入力できない(同...
-
Excelが勝手に閉じてしまって困...
-
inputとenterの違い
-
エクセルVBAでTargetのセルに設...
-
Excelにて入力済セルへの再入力...
-
至急 奨学金のスカラネットで識...
-
左向きにエクセルで作成され申...
-
Windows 画像サイズ変更
-
エクセル 時間を.(ドット)で...
-
初歩的なことなんですが。produ...
-
エクセルVBA、入力しないと閉じ...
-
VLOOKUP関数で返した値(カタカ...
-
gnuPGでパスフレーズが入力でき...
-
teratermでユーザー変更したい
-
Windows 10で日本語の音声入力...
-
カスペルスキーのダウンロード...
-
ifで10個以上の条件判断がしたい
おすすめ情報