過去ログ

                                Page     462
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼do loopに関する質問  あみやき 02/12/16(月) 17:07
   ┗Re:do loopに関する質問  こうちゃん 02/12/17(火) 8:58
      ┗Re:do loopに関する質問  あみやき 02/12/17(火) 9:40

 ───────────────────────────────────────
 ■題名 : do loopに関する質問
 ■名前 : あみやき
 ■日付 : 02/12/16(月) 17:07
 -------------------------------------------------------------------------
   下記の処理で、wsB.Cells(j,1)空白でも処理が行えるはずなのですが、wsB.Cells(j,1)が全て空白になると無限ループしてしまいます。
終了条件にorは使えないのでしょうか?
どなたか、ご指導ください。


Do
   KEYOS = wsB.Cells(j, 1)
   KEYKI = wsB.Cells(j, 6)
   KEYONO = wsB.Cells(j, 5)

   j = j + 1
Do
   If wsB.Cells(j, 6) <> KEYKI Then
    If wsB.Cells(j, 1) = KEYOS Then
          wsT.Cells(RowCNT, 8) = KEYONO
          wsB.Cells(j, 5).Copy wsT.Cells(RowCNT, 9)
          RowCNT = RowCNT + 1
          KICNT = KICNT + 1
          Else
        End If
      End If
    j = j + 1
Loop While wsB.Cells(j, 1) = KEYOS Or wsB.Cells(j, 6) <> 0
Loop While wsB.Cells(j, 6) <> 0
 
 ───────────────────────────────────────  ■題名 : Re:do loopに関する質問  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/12/17(火) 8:58  -------------------------------------------------------------------------
   あみやきさん、こんにちは

>下記の処理で、wsB.Cells(j,1)空白でも処理が行えるはずなのですが、wsB.Cells(j,1)が全て空白になると無限ループしてしまいます。
>終了条件にorは使えないのでしょうか?
Orも、もちろん使えますよ。

>Do
>   KEYOS = wsB.Cells(j, 1)
>   KEYKI = wsB.Cells(j, 6)
>   KEYONO = wsB.Cells(j, 5)
>
>   j = j + 1
>Do
>   If wsB.Cells(j, 6) <> KEYKI Then
>    If wsB.Cells(j, 1) = KEYOS Then
>          wsT.Cells(RowCNT, 8) = KEYONO
>          wsB.Cells(j, 5).Copy wsT.Cells(RowCNT, 9)
>          RowCNT = RowCNT + 1
>          KICNT = KICNT + 1
>          Else
>        End If
>      End If
>    j = j + 1
>Loop While wsB.Cells(j, 1) = KEYOS Or wsB.Cells(j, 6) <> 0

最初にKEYOSにwsB.Cells(j, 1)の値を代入していますので、wsB.Cells(j, 1)がEmpty値のとき、ループに入ったときのKEYOSはEmpty値になっています。
ここでループ判定でwsB.Cells(j, 1)がEmpty値の場合、KEYOS、wsB.Cells(j, 1)ともにEmpty値になりますので、判定は真になります。
判定はOr条件ですので、どちらかが真なら真となりますから、当然ループすると思いますが。

>Loop While wsB.Cells(j, 6) <> 0

なにをしたいのかが書いてありませんので、これ以上のアドバイスは難しいのですが、最初にwsB.Cells(j, 6)値を判定して、処理を分岐したらいかがですか?

#蛇足ですが、j = j + 1 の場所は正しいのですか?2つ目のループに入るとjが必ずインクリメントされますから、1行飛ばして判定しているようですが・・
まあ、こちらも”何をしたいか”がわからないので、ほんとの蛇足かもしれませんが・・(^^;)
 ───────────────────────────────────────  ■題名 : Re:do loopに関する質問  ■名前 : あみやき  ■日付 : 02/12/17(火) 9:40  -------------------------------------------------------------------------
   こうちゃん さん、おはようございます。

ご丁寧に解説していただき、ありがとうございます。
こうちゃんさん、のおかげでループに関して、理解することができました。
どうやら、終了条件のandとorを勘違いしていたようです・・・。

J=J+1のご指摘はキーをその行に変え、そのキーに対して処理を行いたかったので、問題はないと思います。

すごいわかりづらいなか、丁寧なご指導、ほんとに感謝しております。
ありがとうございました。
今後ともよろしくお願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 462