2016-06-27 4 views
2

私はそれらに含まれている静的テキストに基づいてセルを削除する別のチェーンを見つけましたが、今や同様の方法で日付を削除する必要があります。変数の日付に基づいて行を削除

これは私が静的なテキストを除去するために使用していますコードです:

'Sub DeleteRowBasedOnCriteria() 
Dim RowToTest As Long 

For RowToTest = Cells(Rows.count, 6).End(xlUp).Row To 2 Step -1 

With Cells(RowToTest, 6) 
    If .value <> "ALLOW" _ 
     And .value <> "CHRG" _ 
     And .value <> "COST" _ 
    Then _ 
    Rows(RowToTest).EntireRow.Delete 
End With 

Next RowToTest 

End Sub 

素晴らしい作品が、私はこのレポートを実行するとき、私は当日に応じて、(前の2、3日のためにそれを実行します1週間)。私は、最も早い実行日の2日前にあるものを削除する必要があります。たとえば、22日と23日の24日にレポートを実行すると、20日より早い日付のものを削除したいとします。

私はそれがこのように実行される可能性があるように見えますが、私を信じて、T-Rexがバックフリップをしているのと同じくらい能力がありません。私は、静的なテキストのためのコードを変更しようとしましたが、私は正しい軌道に乗っていた場合にVBAコードの限られた知識で、私にはわからない:明らか

'Sub DeleteRowBasedOnCriteria() 
Dim RowToTest As Long 

For RowToTest = Cells(Rows.count, 5).End(x1Up).Row To 2 Step -1 

With Cells(RowToTest, 5) 
    If .value < Today _ 
    Then _ 
    Rows(RowToTest).EntireRow.Delete 
End With 

Next RowToTest 

End Sub 

が、私はアカウントには何もありません。今日の日付の値からレポートが実行される4日前の日数を引いたものですから、私もそこに助けが必要です。現在のフォームでは、私はライン上で、「アプリケーション定義またはオブジェクト定義エラー」を得る:任意のヘルプやアイデアを事前に

For RowToTest = Cells(Rows.count, 5).End(x1Up).Row To 2 Step -1 

感謝を。

+4

は 'x1Up'は' xlUp'と同じではありません! –

+2

'If .value <(Today - 4)Then'は、実行日の前の4日間をチェックします。 –

答えて

1

編集:InputBox関数は

利用日の代わりに、今日を追加しました。 EntireRowは、Rows()、Deleteの場合は不要です。

サブM1() 「ロング

限り 薄暗いDAYCOUNTとしてサブDeleteRowBasedOnCriteria() 薄暗いRowToTest
DayCount = Application.InputBox(Prompt:="How Days Back to CleanUp?", Default:=3, Type:=1) 

For RowToTest = Cells(Rows.Count, 6).End(xlUp).Row To 2 Step -1 

    With Cells(RowToTest, 6) 
     If .Value <> "ALLOW" _ 
      And .Value <> "CHRG" _ 
      And .Value <> "COST" _ 
      Then _ 
      Rows(RowToTest).Delete 
    End With 

Next RowToTest 

For RowToTest = Cells(Rows.Count, 5).End(xlUp).Row To 2 Step -1 

    With Cells(RowToTest, 5) 
     If .Value < (Date - DayCount) Then Rows(RowToTest).Delete 
    End With 

Next RowToTest 

End Subの

+0

@ TKE-439あなたのIf文が正しいと書いた方法です。あなたのやり方は、私のやり方よりも効率的です。 –

+0

これで完璧に動作します。私にこれを頼みましょう。通常、私は前の2日間のレポートを実行します(29日には、27〜28日に実行します)。このため、クリーンアップマクロは完璧に動作しますが、私はそれを1日遅く実行しなければならないとすれば(27日〜28日には30日に実行されます)。その場合、 If.Value <(Date - 3)Then Rows(RowsToTest).Delete は、計算が現在の日付に基づいているため、まだ必要な日数を削除します。何か案は? –

+0

@ TKE-439あなたのためにInputBoxを追加しました。 –

関連する問題