2017-06-21 14 views
0

私は次のことに苦労しています。日付(列C)が今日よりも前の行を削除したいと思います。私のコードは、(ウェブに応じて)動作するはずですが、それはしない、しかも、それはここで...超スローのITの一部です:今日の前日のローの削除 -

For i = 2 To LastRow  
    If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete  
Next i 

の代わりに「C」を入れて、私は3を置くことができますが、何も変わらない私はEnd If(次のiの前)を追加しようとしましたが、明らかに必要ではありません。おそらく、日付が適切な形式ではありません。

このコードの何が問題なのですか?あなたの助けのための

大感謝:)

+0

、それがないことを何をしているのですか? 'Not Working'は説明力が足りません。 'For i = LastRow to 2 Step -1' –

+0

これは、今日よりも前の日付の行が削除されなかったことを意味します。 – Jeofbist3

答えて

0

あなたは行を削除する際に後方ステップと、それは実際に細胞内の日付であることを確認したくなるでしょう。それが何をしているのかを見るには、最初の行にブレークポイントを設定し、F8キーを押します。また、LastRowの値が正しい値に設定されていることを確認します。

For i = LastRow To 2 Step -1 
    If IsDate(Cells(i, "C").Value) then 
     If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete 
    End If 
Next i 
+0

セルを実際の日付値に変換することもできます。 'CVDate(Cells(i、" C ").Value) braX

+0

回答ありがとうございます。私はちょうどあなたのコードを入れて、それは動作します。しかし、コンピューティング時には非常に遅いです(私は11 000行、おそらく理由がありますが、より大きいファイルでは高速ですが、他の式ではそうではありません)。フォーマットは日付(Excel上で右クリック)なので、私はコンバートコードを入れなかった。変換はそれをより速くするでしょうか?私はブレークポイントをどこに設定するのかを知りませんでした:ファイルやコードに?ありがとう:) – Jeofbist3

+0

処理中に画面の更新を無効にすることができます。 'Application.ScreenUpdating = False' 完了したらもう一度オンにしてください。 – braX

1

Excelの自動フィルタ機能を使用してください。一致する行を削除するために、あなたの基準によって範囲をフィルタ:

With Range("C1:C" & lastrow) 
    .AutoFilter 1, "<" & CLng(Date) 
    .Offset(1).EntireRow.Delete 
    .AutoFilter 
    End With 
+0

あなたの答えをありがとう!本当にすごく素早く動作します:) – Jeofbist3

関連する問題