[リストへもどる]
一括表示

投稿時間:2002/09/06(Fri) 18:03
投稿者名:MANA
URL :
タイトル:
ループについて
ループについて教えてください。

For 日2 = 日 To 日 + 7 Step 1 '検索対象は1週間

で、ループさせ、もしこの間で

If Len(MyFile2) > 1 Then がTrueになったら、next

以降、次のループへは入らない、という風にしたいのですが、

どうも、7回やってしまうのです。どのように処置をすれば

よろしいのでしょうか?

投稿時間:2002/09/06(Fri) 19:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ループについて
Exit For を調べて下さい

投稿時間:2002/09/06(Fri) 19:16
投稿者名:MANA
URL :
タイトル:
Re^2: ループについて
Exit for を使いました。今、たぶん出来たようです(汗)
なんか、
For v = 1 To 4
     For 日2 = 日 To 日 + 7 Step 1
         ・
         ・   
    exit for
   next
next
としたら、日2のfor文内で条件一致が見つからないと、永遠に続いています。
1週間という条件の書き方間違ってますか?

投稿時間:2002/09/06(Fri) 19:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: ループについて
ループには問題がないようですが?
Private Sub Command1_Click()
    Dim i As Integer
    Dim H As Long
    Dim j As Integer
    H = 1
    For i = 1 To 4
        For j = H To H + 6
            Debug.Print j
        Next j
    Next i
End Sub

投稿時間:2002/09/09(Mon) 08:39
投稿者名:MANA
URL :
タイトル:
Re^4: ループについて
1週間立ったらfor文から抜ける処理は下記でいいでしょうか?

For v = 1 To 4        
  For 日2 = 日 To 日 + 7 Step 1
  If 日2 > CStr(日 + 7) Then Exit For

これでいいのでしょうか?

投稿時間:2002/09/09(Mon) 08:49
投稿者名:MANA
URL :
タイトル:
Re^5: ループについて
すいません。追加です。

For v = 1 To 4        
   For 日2 = 日 To 日 + 7 Step 1
  If 日2 > CStr(日 + 7) Then Exit For
       If Len(MyFile2) > 1 Then

  next
next

この処理で、if条件が成立したらfor文から抜け、日2が1週間過ぎたら
for文を抜ける処理は、これでいいのでしょうか?

どうも、ファイルが見つかってもまたfor文に入ってしまいます。
教えてくださいっ

投稿時間:2002/09/09(Mon) 10:17
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re^6: ループについて
>  For v = 1 To 4        
>    For 日2 = 日 To 日 + 7 Step 1
>    If 日2 > CStr(日 + 7) Then Exit For

For〜Next内で日2が日+7より大きくなることはありませんので、
この1行は意味がありません。

>        If Len(MyFile2) > 1 Then

最初の質問には、この条件が成り立ったときにFor〜Nextを抜けたいとありますが・・・。

>   next
>  next
>
> この処理で、if条件が成立したらfor文から抜け、日2が1週間過ぎたら
> for文を抜ける処理は、これでいいのでしょうか?

内側のFor文自体が日2が日+7までしか処理しませんので、
日2が一週間すぎたらループ終了というのは、内側のFor文の条件がそれに該当するのでは?

> どうも、ファイルが見つかってもまたfor文に入ってしまいます。
> 教えてくださいっ

何のために外側のFor文があるのかがわかりませんが、
内側のFor文をExit Forで抜けても、外側のループが続けられます。

つまり、最初はv=1の状態で、日2が日〜(日+7)の間処理されます。
MyFile2という変数のサイズが1より大きければ(2以上なら)、この内側のFor文を抜けます。
続いて、v=2の状態で、日2が日〜(日+7)の間処理されます。
MyFile2という変数のサイズが1より大きければ(2以上なら)、この内側のFor文を抜けます。

以降v= 4になるまで繰り返しです。

投稿時間:2002/09/09(Mon) 13:46
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re^6: ループについて
'ループの中は字下げした方が見やすいですよ。
Dim flag as boolean

flag = False
For v = 1 To 4
  For 日2 = 日 To 日 + 7 Step 1
    If Len(MyFile2) > 1 Then
      (1)
      (2)
    End if
  Next
  (3)
Next

問題:上のソース<1>〜<3>に、次の(a)〜(e)から適切な物を選び当てはめましょう
(a) If flag = True Then Exit For
(b) If flag = False Then Exit For
(c) flag = True
(d) flag = False
(e) Exit For

ヒント:内側のループが終了したときに外側のループを抜けるには、
フラグなどを使いループ全体が終了したことを知らせる必要があります。

ちなみにラベルとGOTOを使っていきなりループの外に飛ばすって言う方法も
ありますが、最近ではあまり好まれないようです。
(でもループの階層が深いときにはこちらの方が便利です)

投稿時間:2002/09/09(Mon) 14:37
投稿者名:MANA
URL :
タイトル:
Re^7: ループについて
ありがとうございます。
やってみます。

投稿時間:2002/09/10(Tue) 15:06
投稿者名:MANA
URL :
タイトル:
Re^7: ループについて
> Dim flag as boolean
>
> flag = False
> For v = 1 To 4
>   For 日2 = 日 To 日 + 7 Step 1
>     If Len(MyFile2) > 1 Then
>       (1)
>       (2)
>     End if
>   Next
>   (3)
> Next
>
> 問題:上のソース<1>〜<3>に、次の(a)〜(e)から適切な物を選び当てはめましょう
> (a) If flag = True Then Exit For
> (b) If flag = False Then Exit For
> (c) flag = True
> (d) flag = False
> (e) Exit For
>
 答えは、(1)に(a)、(2)に(d)、(3)に(e)ですね♪
このループは解決しました!でも、今エラーの処理で止まっています(汗)

投稿時間:2002/09/10(Tue) 15:21
投稿者名:MANA
URL :
タイトル:
答え
間違いました!!

>  答えは、(1)に(c)、(2)に(a)、(3)に(e)です!

投稿時間:2002/09/10(Tue) 21:55
投稿者名:NAO★
Eメール:
URL :
タイトル:
不正解です
> 間違いました!!
>
> >  答えは、(1)に(c)、(2)に(a)、(3)に(e)です!

残念ですが、違います。
(1)に(c)というのだけ合ってます。

ヒント、その2: わかりにくいため再度ソースを掲示します
Dim flag as boolean
flag = False
For v = 1 To 4 '--------------------------------+
  For 日2 = 日 To 日 + 7 Step 1 '---+           |
    If Len(MyFile2) > 1 Then    '   |           |
      flag = True  ' (1)        '   +-ループB   +--ループA
      (2)                       '   |           |
    End if                      '---+           |
  Next         '--------------------------------+
  Exit For '(3) ※不正解です
Next

なぜ(3)で(e) Exit Forではダメなのでしょう。
ループA が一回目のときに
>    If Len(MyFile2) > 1 Then
が成立すれば問題ないですが、成立しなかったときはどうなりますか?
内側のループB が何事も無く終了したときに(3) Exit For で
無条件でループを打ち切ってしまうため、
外側のループA は[常に]1回しか実行されなくなってしまうからです。

つまり Exit For は通常 if と共に使います。


ちなみに(2) に
>(a) If flag = True Then Exit For
を使用することは無意味です。
すぐ上の行で flag = true にしているので[必ず] If の条件が成立するからです。

投稿時間:2002/09/11(Wed) 08:35
投稿者名:MANA
URL :
タイトル:
再回答です。
> Dim flag as boolean
> flag = False
> For v = 1 To 4 '--------------------------------+
>   For 日2 = 日 To 日 + 7 Step 1 '---+           |
>     If Len(MyFile2) > 1 Then    '   |           |
>       flag = True  ' (1)        '   +-ループB   +--ループA
>       (2)                       '   |           |
>     End if                      '---+           |
>   Next         '--------------------------------+
>   Exit For '(3) ※不正解です
> Next
>
(3)でExit Forではなくて、(2)でIf文がtrue時にEnd If前にExit Forをするのですね。
(2)が(e)です。
(3)は(a)でtrue時に即、次のfor文に行くようにするものですね。
これでどうでしょうか?

投稿時間:2002/09/11(Wed) 12:58
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re: 再回答です。
正解です。おめでとうございます。

あと、投稿するときにソースがあるときは
図表モードでいいですよ