過去ログ

                                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としたいのですが、ネストが、深い
ので、チェックがエラーになった時点でループの最初に戻りたい
のです。
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : Jaka  ■日付 : 03/1/21(火) 16:32  -------------------------------------------------------------------------
   こんにちは。
[#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
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : A.A.  ■日付 : 03/1/21(火) 21:34  -------------------------------------------------------------------------
   すみません。
再質問なのにお礼としてしまいました。
再度、書かせていただきます。

やりたいことというか、実現したいことはですね、
ループの中に複数の判定処理があり、その判定処理の
いずれかでエラーとなったら、それ以降の処理を中止して
ループの最初から、いうと再入力を促すようにしたいんです。
できますか。
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : 久蔵  ■日付 : 03/1/21(火) 21:42  -------------------------------------------------------------------------
   ▼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

何をイメージされているのでしょうか。?
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : ichinose  ■日付 : 03/1/21(火) 22:52  -------------------------------------------------------------------------
   こんばんは、みなさん
>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
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : Jaka  ■日付 : 03/1/22(水) 11:05  -------------------------------------------------------------------------
   みなさま、こんにちは。

>推測ですが、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
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : JuJu <juju-bbs@su-u.com>  ■日付 : 03/1/22(水) 12:25  -------------------------------------------------------------------------
   みなさま、こんにちは。<コピペ
JuJuです。ご指名ではないけど^^;

>推測ですが、FORTRANのContinue文のような処理をしたいということでしょうか?

たぶん、FORTRANとCにあるようなContinue文のような処理のことでしょうね。
VB(A)にはありません。
なので、For文やDo文の中に大きなIf文(変な表現ですけど)を使うしかないのかな。

>Continueって、次へって意味じゃなかったですか?

COBOLのContinueはそんな意味ですね^^
困ったことにFORTRANのContinueと全く違う命令です。これにもはまった記憶が(;_;)

ではではぁ
 ───────────────────────────────────────  ■題名 : 失礼しました・・・Jakaさん  ■名前 : ichinose  ■日付 : 03/1/22(水) 17:34  -------------------------------------------------------------------------
   ▼Jaka さん:
こんにちは。

すみません、Jakaさん、名前を間違えるなんて、本当に失礼な事を致しました。

>(なぜ、わたくしに振る...? と、思ったけどJでは無くjなんで私じゃ無いようですね!jakaさ〜ん、ichinoseさんが振ってますよぉ〜っ!)

失礼致しました・・・・。
 ───────────────────────────────────────  ■題名 : ichinoseさん どんまい。  ■名前 : Jaka  ■日付 : 03/1/22(水) 17:40  -------------------------------------------------------------------------
   別に気にしてませんです。
ネタが無かったんで、突っこんでみただけです。
 ───────────────────────────────────────  ■題名 : Re:ループについて  ■名前 : moto  ■日付 : 03/1/23(木) 0:31  -------------------------------------------------------------------------
   こんにちわ。

FOTRANとかCOBOLはよく分かりませんがC言語にもcontinue文があります。
繰り返しを中断してループの先頭に戻るというものですが、以降の処理は
やりませんね。
このことをいっているのでしょうか。このような処理をやりたいのでしょうか。

たしか、VBAには、ないときいたことがあります。
皆様方が回答されている方法でやるのがいいのではないでしょうか。
 ───────────────────────────────────────  ■題名 : ありがとうございました。  ■名前 : A.A.  ■日付 : 03/1/23(木) 0:39  -------------------------------------------------------------------------
   みなさん、こんばんわ。

いろいろと回答ありがとうございます。
みなさんが書いたレスを見ましたができないですね。
教えていただいた方法でやってみます。

ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 589