Avatar of mato01
mato01Flag for United States of America asked on

Delete rows if value in column does not contain certain criteria

I need to delete the entire row if the value in  Column C does not contain "Yellow (Y)", "Blue (B)", or "Orange (O)".
Microsoft Excel

Avatar of undefined
Last Comment
dlmille

8/22/2022 - Mon
dlmille

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
ASKER
mato01

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
dlmille

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
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
ASKER
mato01

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
ASKER CERTIFIED SOLUTION
dlmille

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
ASKER
mato01

Perfect. Thanks
dlmille

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
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.