• 締切済み

インプットボックスに数値を入力するまで繰り返すためには、どのように書いたらよろしいでしょうか??

宜しくお願い致します。 現在このように記述しています。 a = InputBox(prompt:="a数値を入力してください", title:="a数値") Do While a = "" Or IsNumeric(a) = False msgbox prompt:="数値を入力してください", title:="未入力" a = InputBox(prompt:="a数値を入力してください", title:="未入力") Loop このように記述するとループに入っているのでインプットボックスが表示されたときにキャンセルボタンを押しても脱出することができないので、他の方法でループかできるはずだと考えていますが、方法の検討がつきません。 どなたかその方法に関して御教授お願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

1回は実行しないとならないから Sub etst01() Do a = InputBox("a=") Loop Until a <> "" And IsNumeric(a) = True MsgBox a End Sub でどうですか。 ーー ほか下記を参考に http://excelvba.pc-users.net/fol6/6_4.html

全文を見る
すると、全ての回答が全文表示されます。
  • t-aka
  • ベストアンサー率36% (114/314)
回答No.1

安直に考えればInputBoxの次の行に If a="" Then Exit Do にすればいいと思います。 ただ Do While a="" ~ と条件式を書いているので コードとしていまいちスッキリしない感じです。 Do  a = InputBox(数値を入力してください)  If a="" Then Exit Do  If IsNumeric(a) Then   Exit Do  Else   MsgBox 正しく数値を入力してください  End If Loop とかはどうでしょうか。 ある程度は好みなのでこれが正解というのは ないと思いますが。 あと、当方携帯より入力しています。 一部記述を簡略化している点はご容赦ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • インプットBox Type:=1で空白でOK選択

    エクセル2003です。 インプットBOXに数値を入力してもらいます。 整数で1文字以上~8文字以内にさせたいです。 (1)キャンセル選択 (2)間違った入力 (3)未入力でOKを選択 の場合記述してある再入力を促すMsgBoxを表示させたいです。 また(2)(3)はMsgBox表示の後インプットBox入力に戻したいです。 以下に掲載した構文で行うと (1)インプットBOXの「キャンセル」選択時 →「終了」MsgBox表示(正常) (2)数字以外を入力した時 →Type:=1にしてある為「数値が正しくありません」  と記述してあるMsgBoxではないが警告メッセージが表示(正常) ・9文字以上入力した場合 →「再入力」MsgBox表示(正常) ・1文字~8文字を入力した場合 →次の処理に進む(正常) (3)何も入力せず空白の状態でインプットBoxの「OK」を選択 →記述してあるMsgBoxではなく 「入力した数式は正しくありません」と書かれたヘルプ付き警告が 表示されてしまいます。  この時は上記同様に記述内にある 再入力を促すMsgBox を表示させたいのですがどう記述すればいいのか分かりません。 インプットBoxのType:=1をはずせば 記述してあるMsgBoxが表示するようになりますが 今度は整数以外が入力できてしまいます。 よろしくお願いします。 Do 指示数 = Application.InputBox("指示数を数字で入力してください ", Type:=1) If 指示数 = "False" Then 'キャンセル選択時 MsgBox "終了します", vbExclamation, "注意" Call 定位置  Exit Sub  End If '1文字以上8文字以内の時はループを抜けて次の処理へ If Len(指示数) <= 8 Then Exit Do 'Loopを抜けて次の処理へ End If MsgBox "ケタ数が違います。再入力してください", vbCritical, "エラー!!" Loop 'インプットBoxに戻る ---次の処理

  • インプットボックスで選択したシートをselectした

    先日ここで、インプットボックスを使ったシート間コピーを教えて頂きました。 その中で、コピー先を選択した後にそのシートがselectされた状態にして、ペースト確認のmsgboxを表示したいのですが、どの様したらいいのでしょうか? Sub コピー() Dim CopyArea As Range Dim PasteArea As Range On Error GoTo ErrorHandler Dim a As String Set CopyArea = Application.InputBox(prompt:= _ "コピー元を指定して下さい", Title:="コピー元", Type:=8) BUCK: Set PasteArea = Application.InputBox(prompt:= _ "貼り付け先を指定して下さい", Title:="貼り付け先", Type:=8) Sheets(****).Select If MsgBox("貼り付けます。" & Chr(10) & "よろしいですか?キャンセルで再選択。", vbOKCancel + vbQuestion) = vbOK Then CopyArea.Copy PasteArea Else GoTo BUCK End If Exit Sub ErrorHandler: MsgBox "処理が取り消されました" End Sub

  • エクセルのInputBoxについて教えてください。

    エクセル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 を入れてますが、このやり方でただしいのでしょうか?

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • エクセルVBAの記述で・・・OTL

    エクセルVBAの記述で・・・OTL VBA初心者です。 まず、私が記述した内容を書きます。 Sub 実践練習() Dim tuika As String tuika = Application.InputBox( _ Title:="追加", _ Prompt:="追加する内容を入力して下さい。", _ Left:=650, _ Top:=100, _ Type:=2) If Worksheets("Sheet2").Range("G10").Value <> " FALSE " Then MsgBox "OKです", vbOKOnly + vbDefaultButton2, "追加完了" With Worksheets("Sheet2") .Range("G10").Value = tuika LastRow = Worksheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Row + 1 Worksheets("Sheet3").Range("A" & LastRow).Value = Worksheets("Sheet2").Range("G10").Value End With Else MsgBox "入力が不足しています。", vbOKOnly + vbCritical, "入力ミス" End If End Sub() 完成させたいことは・・・ Sheet1に存在するInputbox(ボタン)を使用し、 Sheet2のG10にFALSE以外が入力されたときは、 MsgBox追加完了のダイアログを表示してSheet2のG10値をSheet3のA列に順番に転送させる。 もしFALSEが入力されてしまったら、 MsgBox入力ミスを表示させて、 Sheet2のG10の値(FALSE)を削除しなさい。 と、記述したいのです。 勿論、上記の記述は完成していません(泣 どなたか、ご教授の程、何卒宜しくお願い致します。 (上記の完成型をお待ちしてます m(_ _)m ) 【環境】 OS:WindowsXP Pro Excel:2003

  • Input値をシート内の決めた範囲内の値と比べる

    皆様、 いつもお世話になっております。 VBを使っている初心者のものですが、 以下、ご教授いただければと思います。 処理としては、InputBoxで得た値をシートA内にある予め決めた範囲内(例:A5からD20)にある各セルと比較して、もしその範囲内に同じ値があればシートBにそれを下へと記録するということをしたいと考えています。また、InputBoxに'x'と入力されるまでこれを続けます。 ループのところは、うまくいくのですが、InputBoxからの値をシートAと比較するロジックをどう記載すればいいか分かりません。 セルをひとつひとつ if で比較していくと大変なことになってしまうので、なんとか簡単な方法がないか探しています。 いい方法を知っている方、アドバイスしていただけると嬉しいです。 Sample: Dim entry As String Dim i As Integer Sub example1() Set SheetA = Worksheets("Sheet1") Set SheetB = Worksheets("Sheet2") i = 1 Do entry = InputBox("名前を入力してください", "名前", "") If entry <> SheetA.Range("A5:D20").Value Then <<< ここをどうすればいいかわかりません 汗 MsgBox ("名前がありません") End Sub Else SheetA.Cells(i, 1).Value = entry End If i = i + 1 Loop Until entry = "x" End Sub どうぞ、よろしくお願いします。

  • Excelの数値の比較がうまくいきません???

    ExcelのVbaでアンケートの入力フォームを初めて作成しています。 フォームに,テキストボックスを配置して,それを指定したセルに代入するというものです。 このとき,テキストボックスの中身とセルの中身が一致しているかどうかを判断したいと考えて, If Range("A1").Value = Textbox1.Value then ・・・ などとやりました。 そしたら,文字列の時は,うまくいくのですが,数値を入力したら,明らかに同じ数値が入っているのに,上の条件式が"False"になってしまうのです。 IsNumeric関数で調べると,双方とも数値であるとの結果が出ています。どちらも数値であっても3=3が"False"になってしまうのです。 どういうことなんでしょう? どなたかよろしくお願いいたします。

  • セルには何も入ってないのに、数値型になる理由は?

    セルに何も入ってない状態で Sub Macro() If IsNumeric(Range("a1").Value) = True Then MsgBox "A1には数値が入ってます" End If End Sub を実行すると、 "A1には数値が入ってます" が表示されます。 なぜでしょうか? Sub Macro2() MsgBox TypeName(Range("a1").Value) End Sub を実行すると、stringが返ってきます。

  • エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい

    エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい。 たとえばセルA1に、1以上の数値が入力されたときに、セルA2に今日の日付を入力させる マクロの記述はどうすれば宜しいでしょうか? 以下の記述で、セルA2に日付は入力させられるのですが、 セルA1に1以上の数値が入力された場合に起動させる方法が分かりません。 Range("A2").Select SendKeys "^(;){ENTER}" ご教授の程、宜しくお願い申し上げます。

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

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

母が教職を取れとうるさい
このQ&Aのポイント
  • 現在高校2年生の私は、大学で英文学を専攻するために猛勉強しています。
  • しかし、母が私に英語の教職を取るように強く勧めてきています。
  • 私は自分の将来を考え、英語についてもっと深く学び、外資系企業で働きたいと思っていますが、母との意見の相違があります。
回答を見る