2016-08-22 15 views
0

他のスタック交換の問題のロジックを同様の問題で使用しましたが、わかりません。 (良い例はここで見て:VBa conditional delete loop not working)私はそれが本当に簡単だと確信しています。なぜ私のコードはここで無限ループに陥っていますか?VBA excel delete endless loop

値を置き換えてから行の範囲を削除するだけです。どのようなアイデアが間違っている?おそらくダブルループの問題?私はそれをあまりにも長く見てきました、そして、それはすべて私にとって論理的です。どんな助けでも大歓迎です。

i = 4 
Do While i < 10 
    j = 0 
    Do While j < 24 
     ho = Cells(i, 69 + j) 
     If 0 < ho < 3 Then 
      k = Cells(i, 67 + j) 
      Cells(i - 1, 67 + j) = k 
      Range(Cells(i, 66 + j), Cells(i, 69 + j)).Delete (xlShiftUp) 
     Else 
      j = j + 4 
     End If 
    Loop 
    i = i + 1 
Loop 
+2

ループカウンタを増分する文をif文の中に入れないでください。あなたのコードが常にステートメントのelse部分を実行している場合を除き、 'j'は静的な値でスタックされ、24に達することはありません。 – eirikdaude

+0

より明確にするために' DoEvents'と 'Debug.Print j'をステートメント'End If'と' Loop'です。イミディエイトウィンドウで 'j'の値を確認してください。 –

+0

これは良い考えですが、変更していないことを確認するために行をチェックし続けたいからです(削除されているので)。何も削除されない場合は、インクリメントするだけです。右?多分私はここで間違っていますか? – Tee

答えて

0

if文を変更します。これ以上データがない場合は、これを停止します。

If 0 < ho AND ho < 3 AND ho<>"" Then 
+0

私の答えを訂正 – atclaus

+0

ありがとう@ YowE3K。あなたが正しいです。更新された – atclaus

+0

はい!これにより、無限ループが停止します。ありがとう、私は私のifステートメントを混乱させることは決して考えなかった!しかし、それはどんな細胞も排除していません...例えば0.3(ホーはダブルです)、消えるはずの他の値は変わりません。私はこれがループの問題かもしれないと思う。私は何が起こっているのか分からないので、今夜はアナスタシアのアドバイスを試してみます。私は次の4つの列に進むのが奇妙であることを知っていますが、それは単にデータがどのように構造化されているかです。 – Tee