Compare blank cells in a column

E

eidde1

Hi
I am looking for some VBA to do the following please. I have 4 columns
of data. Column D contains results of tests most of the columns have
the word “Negative” some are blank (ie test has not been carried out
yet) and some have a comment (free text). There is a Product number in
column C. I want to be able to compare the blank cells to the cells
with the word negative and identify any matches of product number just
leaving the rows with blank cells which have a matched product number
as follows.

Date Item ProductNo Result
01/01/09 Screws 2345 Negative
02/01/09 Washers 13658 Negative
03/01/09 Bolts 15896 Negative
05/01/09 Screws 12345
09/01/09 Washers 13658
14/01/09 Bolts 15896 Not suitable
15/01/09 Spanners 56987 Negative

Giving

05/01/09 Screws 12345
09/01/09 Washers 13658


I hope this is possible.

Any help is greatly appreciated

Eddie
 
J

joel

Sub RemoveRows()

'first sort data in column D
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
key1:=Range("D1"), _
Order1:=xlAscending, _
header:=xlYes

If Range("d2") <> "" Then
LastRow = Range("D2").End(xlDown).Row
Rows("2:" & LastRow).Delete
End If
End Sub
 
E

eidde1

Sub RemoveRows()

'first sort data in column D
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
   key1:=Range("D1"), _
   Order1:=xlAscending, _
   header:=xlYes

If Range("d2") <> "" Then
   LastRow = Range("D2").End(xlDown).Row
   Rows("2:" & LastRow).Delete
End If
End Sub









- Show quoted text -

Thanks joel

Unfortunately this deletes all rows. It does not leave the rows where
there is a match in product number in column C.
 
J

joel

My last macro ggave the same results you had posted. I went back and read
your instructions and found that you only want one result (13658). here is
the modified code.


Sub RemoveRows()

'first sort data in column C and D
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
key1:=Range("C1"), _
Order1:=xlAscending, _
key2:=Range("D1"), _
Order2:=xlAscending, _
header:=xlYes

'put x in rows to delete
For RowCount = 2 To LastRow
If Range("D" & RowCount) <> "" Or _
Range("C" & RowCount) <> _
Range("C" & (RowCount - 1)) Then

Range("E" & RowCount) = "X"
End If

Next RowCount

'sort deleted rows to top of sheet
SortRange.Sort _
key1:=Range("E1"), _
Order1:=xlAscending, _
header:=xlYes

If Range("E2") <> "" Then
LastRow = Range("E" & Rows.Count).End(xlUp).Row
Rows("2:" & LastRow).Delete
End If
End Sub
 
E

eidde1

My last macro ggave the same results you had posted.  I went back and read
your instructions and found that you only want one result (13658).  here is
the modified code.

Sub RemoveRows()

'first sort data in column C and D
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
   key1:=Range("C1"), _
   Order1:=xlAscending, _
   key2:=Range("D1"), _
   Order2:=xlAscending, _
   header:=xlYes

'put x in rows to delete
For RowCount = 2 To LastRow
   If Range("D" & RowCount) <> "" Or _
      Range("C" & RowCount) <> _
         Range("C" & (RowCount - 1)) Then

      Range("E" & RowCount) = "X"
   End If

Next RowCount

'sort deleted rows to top of sheet
SortRange.Sort _
   key1:=Range("E1"), _
   Order1:=xlAscending, _
   header:=xlYes

If Range("E2") <> "" Then
   LastRow = Range("E" & Rows.Count).End(xlUp).Row
   Rows("2:" & LastRow).Delete
End If
End Sub







- Show quoted text -

Thanks Joel
This works perfect, one last thing. On the data I showed on my first
message column D may contain blank cells the word "Negative" or Free
text "such as "Not tested", if by some chance the following occurs I
also get the free text row when the query is run .

Date Item ProductNo Result
01/01/09 Screws 12345 Negative
02/01/09 Washers 13658 Negative
03/01/09 Bolts 15896 Negative
05/01/09 Screws 12345
09/01/09 Washers 13658
14/01/09 Bolts 15896 Not suitable
15/01/09 Spanners 56987 Negative
16/01/09 Bolts 15896

I now get
05/01/09 Screws 12345
09/01/09 Washers 13658
16/01/09 Bolts 15896

I would need
05/01/09 Screws 12345
09/01/09 Washers 13658

Therefore leaving out the "not suitable" match

Hope this is possible

You have been a great help to me today

Thanks very much
Eddie
 
J

joel

Deleteing all Not suitable items became more difficult. I used a SUMPRODUCT
formula on the worksheet to help get this right.

Sub RemoveRows()

'first sort data in column C and D
LastRow = Range("A" & Rows.Count).End(xlUp).Row

'do Not suitable test
'if one item is not suitable marked all the
'items not suitable
a = "=if(sumproduct(--(C$2:C$" & LastRow & "=" & C2 & "))"
Range("E2").Formula = _
"=if(sumproduct(--(C$2:C$" & LastRow & "=C2)," & _
"--(D$2:D$" & LastRow & "=""Not Suitable""))>0,""X"","""")"
Range("E2").Copy _
Destination:=Range("E2:E" & LastRow)
'replace formula with values
Range("E2:E" & LastRow).Copy
Range("E2:E" & LastRow).PasteSpecial _
Paste:=xlPasteValues


Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
key1:=Range("C1"), _
Order1:=xlAscending, _
key2:=Range("D1"), _
Order2:=xlAscending, _
header:=xlYes

'put x in rows to delete
For RowCount = 2 To LastRow
If Range("D" & RowCount) <> "" Or _
Range("C" & RowCount) <> _
Range("C" & (RowCount - 1)) Then

Range("E" & RowCount) = "X"
Else
If Range("E" & RowCount) <> "X" Then
Range("E" & RowCount) = ""
End If
End If

Next RowCount

'sort deleted rows to top of sheet
SortRange.Sort _
key1:=Range("E1"), _
Order1:=xlAscending, _
header:=xlYes

If Range("E2") <> "" Then
LastRow = Range("E" & Rows.Count).End(xlUp).Row
Rows("2:" & LastRow).Delete
End If
End Sub
 
E

eidde1

Deleteing all Not suitable items became more difficult.  I used a SUMPRODUCT
formula on the worksheet to help get this right.

Sub RemoveRows()

'first sort data in column C and D
LastRow = Range("A" & Rows.Count).End(xlUp).Row

'do Not suitable test
'if one item is not suitable marked all the
'items not suitable
a = "=if(sumproduct(--(C$2:C$" & LastRow & "=" & C2 & "))"
Range("E2").Formula = _
   "=if(sumproduct(--(C$2:C$" & LastRow & "=C2)," & _
   "--(D$2:D$" & LastRow & "=""Not Suitable""))>0,""X"","""")"
Range("E2").Copy _
   Destination:=Range("E2:E" & LastRow)
'replace formula with values
Range("E2:E" & LastRow).Copy
Range("E2:E" & LastRow).PasteSpecial _
   Paste:=xlPasteValues

Set SortRange = Rows("1:" & LastRow)
SortRange.Sort _
   key1:=Range("C1"), _
   Order1:=xlAscending, _
   key2:=Range("D1"), _
   Order2:=xlAscending, _
   header:=xlYes

'put x in rows to delete
For RowCount = 2 To LastRow
   If Range("D" & RowCount) <> "" Or _
      Range("C" & RowCount) <> _
         Range("C" & (RowCount - 1)) Then

      Range("E" & RowCount) = "X"
   Else
      If Range("E" & RowCount) <> "X" Then
         Range("E" & RowCount) = ""
      End If
   End If

Next RowCount

'sort deleted rows to top of sheet
SortRange.Sort _
   key1:=Range("E1"), _
   Order1:=xlAscending, _
   header:=xlYes

If Range("E2") <> "" Then
   LastRow = Range("E" & Rows.Count).End(xlUp).Row
   Rows("2:" & LastRow).Delete
End If
End Sub













- Show quoted text -

Hi Joel
I meant to get back earlier, this works beautifully. Thank you for all
your help and patience with this problem.

Eddie
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top