Solved

Delete rows if value in column does not contain certain criteria

Posted on 2012-03-17
7
220 Views
Last Modified: 2012-03-17
I need to delete the entire row if the value in  Column C does not contain "Yellow (Y)", "Blue (B)", or "Orange (O)".
0
Comment
Question by:mato01
  • 4
  • 3
7 Comments
 
LVL 42

Expert Comment

by:dlmille
ID: 37733370
As requested

Sub delRowsCriteria()
Dim wkb As Workbook
Dim wks As Worksheet
Dim rng As Range
Dim r As Range
Dim lastRow As Long
Dim rDelete As Range
Dim sCheck As String

    Set wkb = ThisWorkbook
    Set wks = wkb.ActiveSheet
    
    lastRow = wks.Cells.Find(what:="*", LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlPrevious).Row
    Set rng = wks.Range("C1:C" & lastRow)
    
    For Each r In rng
        sCheck = Application.WorksheetFunction.Trim(r.Value)
    
        If UCase(sCheck) <> "YELLOW (Y)" And UCase(sCheck) <> "BLUE (B)" And UCase(sCheck) <> "ORANGE (O)" Then
            If rDelete Is Nothing Then
                Set rDelete = r
            Else
                Set rDelete = Union(r, rDelete)
            End If
        End If
    Next r
    
    rDelete.EntireRow.Delete
        
End Sub

Open in new window


See attached demonstration workbook.

Dave
checkColors-r1.xls
0
 

Author Comment

by:mato01
ID: 37733425
I was using the colors generically.  When I put in the actual text, it deletes all the rows instead of leaving me with

Mexico (MEX)
Canada (CAN)
U.S.A., P&US (UPU)
Europe-S.America (ESA)

For example, I put in the real data in your sample, and in the real data, and it did not work. Is there something else in the code I need to change. except for  this line.

 If UCase(sCheck) <> "Mexico (MEX)" And UCase(sCheck) <> "Canada (CAN)" And UCase(sCheck) <> "U.S.A., P&US (UPU)"  And UCase(sCheck) <> "Europe-S.America (ESA)Then
0
 
LVL 42

Expert Comment

by:dlmille
ID: 37733432
You did not specify what your criteria would be other than what you specified in your original question.  You have to be more specific as we cannot read minds - we're getting close, but not there yet ;)

Yes, but the line would need to be:

 If UCase(sCheck) <> "MEXICO (MEX)" And UCase(sCheck) <> "CANADA (CAN)" And UCase(sCheck) <> "U.S.A., P&US (UPU)"  And UCase(sCheck) <> "EUROPE-S.AMERICA (ESA)" Then

The UCASE converts all to upper case so this is without case sensitivity.  If you want case sensitivity, just take the UCASE function out.

Here's another way using a case statement, so a bit cleaner if you have a lot of criteria:
Option Explicit

Sub delRowsCriteria()
Dim wkb As Workbook
Dim wks As Worksheet
Dim rng As Range
Dim r As Range
Dim lastRow As Long
Dim rDelete As Range
Dim sCheck As String

    Set wkb = ThisWorkbook
    Set wks = wkb.ActiveSheet
    
    lastRow = wks.Cells.Find(what:="*", LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlPrevious).Row
    Set rng = wks.Range("C1:C" & lastRow)
    
    For Each r In rng
        sCheck = Application.WorksheetFunction.Trim(r.Value)
    
        Select Case UCase(sCheck):
            Case "YELLOW (Y)", "BLUE (B)", "ORANGE (O)":  'add as many as you need
                'do nothing
            Case Else:
        
                If rDelete Is Nothing Then
                    Set rDelete = r
                Else
                    Set rDelete = Union(r, rDelete)
                End If
        End Select
        
    Next r
    
    rDelete.EntireRow.Delete
        
End Sub

Open in new window


Attached.

PS - if you're still having difficulties, post a sample.


Dave
checkColors-r2.xls
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 

Author Comment

by:mato01
ID: 37733526
Okay. Sorry for the confusion. I was just trying to be careful on what information I posted.

Anyway, it isn't quite working for me.  I've attached a sample file with data and code.
Test-Pens.xlsm
0
 
LVL 42

Accepted Solution

by:
dlmille earned 200 total points
ID: 37733530
Thanks for sending a sample.  First, we were using UCASE as to not be case sensitive, but your criteria is in upper/lower case.  So, I took the UCASE out and checked all spelling.

Works like a charm, now.

Let me know if you have further difficulties.

See attached.

Dave
Test-Pens-r1.xlsm
0
 

Author Closing Comment

by:mato01
ID: 37733604
Perfect. Thanks
0
 
LVL 42

Expert Comment

by:dlmille
ID: 37733620
You know you have unlimited points to distribute.  I pick up any question, but other experts may pass you buy with low point totals, as they think perhaps you don't think its that important/urgent and move on to the more urgent ones.

Cheers,

Dave
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Convert between Excel file formats (.XLS, .XLSX, .XLSM) with/without macro option David Miller (dlmille) Intro Over this past Fall, I've had the opportunity to see several similar requests and have developed a couple related solutions associateā€¦
This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
The viewer will learn how to create a normally distributed random variable in Excel, use a normal distribution to simulate the return on an investment over a period of years, Create a Monte Carlo simulation using a normal random variable, and calculā€¦
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.

837 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question