Page 589 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼ループについて A.A. 03/1/21(火) 15:38 ┣Re:ループについて Jaka 03/1/21(火) 16:32 ┃ ┗Re:ループについて A.A. 03/1/21(火) 21:34 ┃ ┗Re:ループについて 久蔵 03/1/21(火) 21:42 ┗Re:ループについて ichinose 03/1/21(火) 22:52 ┣Re:ループについて Jaka 03/1/22(水) 11:05 ┃ ┣Re:ループについて JuJu 03/1/22(水) 12:25 ┃ ┣失礼しました・・・Jakaさん ichinose 03/1/22(水) 17:34 ┃ ┃ ┗ichinoseさん どんまい。 Jaka 03/1/22(水) 17:40 ┃ ┗Re:ループについて moto 03/1/23(木) 0:31 ┗ありがとうございました。 A.A. 03/1/23(木) 0:39 ─────────────────────────────────────── ■題名 : ループについて ■名前 : A.A. ■日付 : 03/1/21(火) 15:38 -------------------------------------------------------------------------
While・・・Wend、Do・・・Loopのループで、ループ内の判定処理で 異常となったとき、次の判定処理を行わず、再度、ループの先頭 から行えるようにするには、どうしたらよいのですか。 例えば、無限ループで、InputBoxを表示され、入力された値を チェックするのですが、最初のチェックでエラーになったとき 次のチェックを行わずに再度、InputBoxを表示させ、入力させた いのですが。 If・・・ElseIf・・・ElseIf・・・Elseとしたいのですが、ネストが、深い ので、チェックがエラーになった時点でループの最初に戻りたい のです。 |
こんにちは。 [#2942]をちょっと直して、こんな感じ。 判定に関しては、この下のJuJuさんのレスも良く見てね! sub ai() Dim hi As Variant Do hi = Application.InputBox("入力して下さい。", "タイトル", , , 2) If hi = False Then MsgBox "キャンセル又は閉じるボタン" end ElseIf hi = "" Then MsgBox "OKで、入力無し" 'つまりエラー Else MsgBox "okで、入力あり" exit do End If Loop msgbox "エラー無く抜けました。" end sub |
すみません。 再質問なのにお礼としてしまいました。 再度、書かせていただきます。 やりたいことというか、実現したいことはですね、 ループの中に複数の判定処理があり、その判定処理の いずれかでエラーとなったら、それ以降の処理を中止して ループの最初から、いうと再入力を促すようにしたいんです。 できますか。 |
▼A.A. さん: ネストが深くなるってどういうことですか。?よく見えません。? jakaさんのレスにもあるとおり、If・・・ElseIF・・・Else等で 出来るのではないですか。 または、gotoで先頭に飛ばして戻るとか。 do LOOP_TOP: InputBox() if () then Goto LOOP_TOP: if () then Goto LOOP_TOP: if () then Exit Do Loop 何をイメージされているのでしょうか。? |
こんばんは、みなさん >While・・・Wend、Do・・・Loopのループで、ループ内の判定処理で >異常となったとき、次の判定処理を行わず、再度、ループの先頭 >から行えるようにするには、どうしたらよいのですか。 > >例えば、無限ループで、InputBoxを表示され、入力された値を >チェックするのですが、最初のチェックでエラーになったとき >次のチェックを行わずに再度、InputBoxを表示させ、入力させた >いのですが。 >If・・・ElseIf・・・ElseIf・・・Elseとしたいのですが、ネストが、深い >ので、チェックがエラーになった時点でループの最初に戻りたい >のです。 推測ですが、FORTRANのContinue文のような処理をしたいということでしょうか? (何ていっても忘れちゃったけど・・・)。 VBAにはないんで(ないよね、jakaさん?)結局のところ、IF文で制御するしかないんですが、Ifが沢山あると、プロシジャー内が見難くなっちゃうと思ったときは、プロシジャー分けてしまいませんか?(場合によっては、Gosubでもいいし・・) 以下に示す例は、Inputboxメソッドで入力された文字列の頭3文字が"abc"でなかったら、エラーにしてしまうものですが・・・・。 '================================================ Sub test() Dim 結果 As Long Do ans = Application.InputBox("input") If VarType(ans) = vbBoolean And ans = False Then Exit Do Else 結果 = chk_data_abc(ans) If 結果 = 0 Then MsgBox "ok" Else MsgBox 結果 & "文字目が駄目" End If End If Loop End Sub '=========================================== Function chk_data_abc(ans) As Long 'input : ans チェックする文字列 'output: ans 0---正しく"abc"が入力された ' 1---1文字目が違う ' 2---2文字目が違う ' 3---3文字目が違う ' If Mid$(ans, 1, 1) = "a" Then If Mid$(ans, 2, 1) = "b" Then If Mid$(ans, 3, 1) = "c" Then chk_data_abc = 0 Else chk_data_abc = 3 End If Else chk_data_abc = 2 End If Else chk_data_abc = 1 End If End Function |
みなさま、こんにちは。 >推測ですが、FORTRANのContinue文のような処理をしたいということでしょうか? >(何ていっても忘れちゃったけど・・・)。 >VBAにはないんで(ないよね、jakaさん?) す、すみません。わたくしFORTRANなんて、し、知りません。 (なぜ、わたくしに振る...? と、思ったけどJでは無くjなんで私じゃ無いようですね!jakaさ〜ん、ichinoseさんが振ってますよぉ〜っ!) Continue なんて、昔昔COBOLで使ったことがあるだけです。しかも別に使わなくても良いのにわざわざ入れて、こんな感じに。 If xxxx 1 Or 2 Then ふにゃふにゃ Else Continue End IF Continueって、次へって意味じゃなかったですか? VBAにあるかなんて、考えた事も無かったです。Exit For、Exit Do等もあるし。 VBAってあんまり入れ子が得意だと思いませんが、 ElseIf は、入れ子と何か違う様な気がします。(End Ifが1つで済む) もっと具体的なな事が解ればいいんですけど、コードなど提示してみたらどうですか? きっと良い案が、出てくると思います。 半角カタカナの数字等も半角英数字として扱っちゃう所もありますが、参考になれば...。 http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200204/02040053.txt |
みなさま、こんにちは。<コピペ JuJuです。ご指名ではないけど^^; >推測ですが、FORTRANのContinue文のような処理をしたいということでしょうか? たぶん、FORTRANとCにあるようなContinue文のような処理のことでしょうね。 VB(A)にはありません。 なので、For文やDo文の中に大きなIf文(変な表現ですけど)を使うしかないのかな。 >Continueって、次へって意味じゃなかったですか? COBOLのContinueはそんな意味ですね^^ 困ったことにFORTRANのContinueと全く違う命令です。これにもはまった記憶が(;_;) ではではぁ |
▼Jaka さん: こんにちは。 すみません、Jakaさん、名前を間違えるなんて、本当に失礼な事を致しました。 >(なぜ、わたくしに振る...? と、思ったけどJでは無くjなんで私じゃ無いようですね!jakaさ〜ん、ichinoseさんが振ってますよぉ〜っ!) 失礼致しました・・・・。 |
別に気にしてませんです。 ネタが無かったんで、突っこんでみただけです。 |
こんにちわ。 FOTRANとかCOBOLはよく分かりませんがC言語にもcontinue文があります。 繰り返しを中断してループの先頭に戻るというものですが、以降の処理は やりませんね。 このことをいっているのでしょうか。このような処理をやりたいのでしょうか。 たしか、VBAには、ないときいたことがあります。 皆様方が回答されている方法でやるのがいいのではないでしょうか。 |
みなさん、こんばんわ。 いろいろと回答ありがとうございます。 みなさんが書いたレスを見ましたができないですね。 教えていただいた方法でやってみます。 ありがとうございました。 |