Forum Discussion

clh_1496's avatar
clh_1496
Brass Contributor
Jun 15, 2022

Macro that deletes rows based on date and time

Hi, I'm still looking to try and add to the last lines of my macro (the whole macro listed below) I've got:

lr = Cells(Rows.Count, "C").End(xlUp).Row 'find last row
For i = lr To 2 Step -1 'loop thru backwards, finish at 2 for headers
If Cells(i, "C").Text = "#N/A" Then Rows(i).EntireRow.Delete
Next i

which works to find any NA's and deletes those entire rows and I was trying to do something similar with columns U and V, where by it deletes any entire rows where the date is after the date on the front of the report (Summary J3) and after a certain time (Reference Sheet c12), Or any dates that are earlier the date in Summary G3 Date and after a certain time (reference sheet C13)

So far I've tried to recreate the code that works for deleting NA's with the below with no cigar:

lrU = Cells(Rows.Count, "U").End(xlUp).Row 'find last row
LrV = Cells(Rows.Count, "V").End(xlUp).Row 'find last row
For i = lrU To 2 Step -1 'loop thru backwards, finish at 2 for headers
'column "U" is column21
If Cells(i, 21).Value < Worksheets("Summary").Cells(3, 7).Value And _
Cells(i, 22).Value < Worksheets("Reference Sheet").Cells(12, 4).Value Or _
Cells(i, 21).Value > Worksheets("Summary").Cells(3, 10).Value And _
Cells(i, 22).Value > Worksheets("Reference Sheet").Cells(13, 4).Value Then
Rows(i).EntireRow.Delete

 

  • mtarler's avatar
    mtarler
    Silver Contributor

    clh_1496  I'm not going to parse through all your code right now but a quick look at the section of interest. 

    But First:

    you say "date is after the date ... and after a certain time ..." so are you comparing DATE/DAY in once case and TIME in the other?  If so you have to look at the whole number value for the DATE comparison and the fractional portion for the TIME.

    Next:

    you say "date is after the date on the front of the report (Summary J3) and after a certain time (Reference Sheet c12), Or any dates that are earlier the date in Summary G3 Date and after a certain time (reference sheet C13)" BUT your lines indicate <G3 AND <D12   OR  >J3 AND >D13 ,  So first off you have an issue between column D and column C and then the grouping is mixed up AND you don't use any () to group them so the order of operations my not act the way you think.

    I would suggest:

    lrU = Cells(Rows.Count, "U").End(xlUp).Row 'find last row
    LrV = Cells(Rows.Count, "V").End(xlUp).Row 'find last row  'not used and assume both columns same length

    Date1=Worksheets("Summary").Cells(3, 10).Value2

    Time1=Worksheets("Reference Sheet").Cells(12, 3).Value2

    Date2=Worksheets("Summary").Cells(3, 7).Value2

    Time2=Worksheets("Reference Sheet").Cells(13, 4).Value2
    For i = lrU To 2 Step -1 'loop thru backwards, finish at 2 for headers
    'column "U" is column21
    If (  ( (Cells(i, 21).Value < Date2) And (Cells(i, 22).Value < Time2) ) Or _
          ( (Cells(i, 21).Value > Date1) And (Cells(i, 22).Value > Time2) ) ) Then
    Rows(i).EntireRow.Delete

    • clh_1496's avatar
      clh_1496
      Brass Contributor

      mtarler 

       

      I've tried your code (edited slightly as like you said should have been C12 for Time), I've also included the line before as the code is removing the "#N/A" rows but for some reason isn't able to distinguish the dates and time still? Do you have any other suggestions?

       

      lr = Cells(Rows.Count, "C").End(xlUp).Row 'find last row
      For i = lr To 2 Step -1 'loop thru backwards, finish at 2 for headers
      If Cells(i, "C").Text = "#N/A" Then Rows(i).EntireRow.Delete
      Next i
      lrU = Cells(Rows.Count, "U").End(xlUp).Row 'find last row
      Date1 = Worksheets("Reference Sheet").Cells(16, 3).Value2
      Time1 = Worksheets("Reference Sheet").Cells(12, 3).Value2
      Date2 = Worksheets("Reference Sheet").Cells(15, 3).Value2
      For i = lrU To 2 Step -1 'loop thru backwards, finish at 2 for headers
      'column "U" is column21
      If (((Cells(i, 21).Value < Date2) And (Cells(i, 22).Value < Time1)) Or _
      ((Cells(i, 21).Value > Date1) And (Cells(i, 22).Value > Time1))) Then
      Rows(i).EntireRow.Delete

      • mtarler's avatar
        mtarler
        Silver Contributor
        you didn't answer my first question:
        you say "date is after the date ... and after a certain time ..." so are you comparing DATE/DAY in once case and TIME in the other? If so you have to look at the whole number value for the DATE comparison and the fractional portion for the TIME.
        basically what are the values in columns U & V and the values assigned to Date1, Date2, and Time1?
        It would be much easier if you could attach the sheet or give a link to it (no confidential/private/personal info)

Resources