VBA - Delete row based on cell above (date) and cells left (number)

marshy3300

Board Regular
Joined
Aug 17, 2014
Messages
54
Hi - I have in A some order numbers and D has dates. A will populate blanks below row 1 until a new order begins and then enter a new order number followed by blanks dependent on how many lines on the order. D has 2 different dates.

I want to be able auto fill the blanks in A (already solved) and delete the whole row based on the date above not matching and the order numbers matching as well.
Where the order number is listed as default (before auto fill) the corresponding date will always be the one to keep

Sorry i cant post attachements!

1 .......order number..........code............description.......date.........result<result>
2 .......66644...................Item1 ............Descr 1 ........13/06 .......Keep
3 .......blank ...................item2 ............descr 2 ........13/06 .......keep
4 .......blank ...................item 3 ............descr 3 ........07/06 .......delete
5 .......blank ...................item 4 ............descr 4 ........13/06 .......keep
6 .......66687 .................Item1 ............Descr 1 ........20/06 .......Keep
7 .......blank ..................item5 ............descr 5 ........13/06 .......delete
8 .......blank ...................item 6 ............descr 6 ........20/06 .......keep
9 .......blank ...................item 7 ............descr 7 ........13/06 .......delete
10 .....67015 ...................item 3 ............descr 3 ........19/09 .......keep</result>
 
Last edited:

Some videos you may like

Excel Facts

Best way to learn Power Query?
Read M is for (Data) Monkey book by Ken Puls and Miguel Escobar. It is the complete guide to Power Query.

ParamRay

Well-known Member
Joined
Aug 6, 2014
Messages
1,195
Here is how I did it. Make sure you change the sheet name in the indicated line.

Code:
Public Sub DeleteRows()
  Dim lngLastRow As Long
  Dim lngCounter As Long
  Dim rngFirst As Range
  Dim wksData As Worksheet
  Dim j As Long
  
  On Error GoTo ErrorHandler
  Set wksData = ThisWorkbook.Sheets("Orders")   '<--- IMPORTANT: Set name of sheet here
  
  lngLastRow = wksData.Cells(wksData.Rows.Count, "B").End(xlUp).Row

' Fill the blanks in column A:
  
  On Error Resume Next
  With wksData.Range("A2:A" & lngLastRow)
    .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    .Value = .Value
  End With
  
' Delete rows with inconsistent dates:
  
  On Error GoTo ErrorHandler
  For j = lngLastRow To 2 Step -1
    Set rngFirst = wksData.Range("A2:A" & lngLastRow).Find( _
      What:=wksData.Cells(j, "A").Value, _
      After:=wksData.Cells(lngLastRow, "A"), _
      LookIn:=xlValues, LookAt:=xlWhole)
    If wksData.Cells(j, "D").Value <> rngFirst.Offset(, 3).Value Then
      wksData.Rows(j).Delete
      lngCounter = lngCounter + 1
    End If
  Next j
  
  MsgBox Format(lngCounter, "#,0") & " row(s) were deleted.", vbInformation
  
ExitHandler:
  Set rngFirst = Nothing
  Set wksData = Nothing
  Exit Sub
  
ErrorHandler:
  MsgBox Err.Description, vbExclamation
  Resume ExitHandler
End Sub
 

marshy3300

Board Regular
Joined
Aug 17, 2014
Messages
54
Hi ParamRay - You're a gun. I like how you've incorporated the solved bit as well.
Works a treat - Cheers
 

Watch MrExcel Video

Forum statistics

Threads
1,099,246
Messages
5,467,507
Members
406,543
Latest member
margram

This Week's Hot Topics

Top