Delete Macro with OR/ELSE condition

M

Mike

I am a beginner a writing Macros in Excel. I have a Macro that deletes any
record that does not equal "Server/Midrange Software" in column M. I need to
expand this to include other criteria. Such as,

if column M does not equal "Server/Midrange Software" or does not equal
"Data Telecom" then delete the record.

The Macro I have currently is.....

Sub TryMe()
'Deletes rows where the value in column M are not equal to Server/Midrange
Software
Dim RowMdx As Long
Dim LastRow As Long

LastRow = Cells(Rows.Count, "M").End(xlUp).Row

For RowMdx = LastRow To 1 Step -1
If Cells(RowMdx, "M").Value <> "Server/Midrange Software" Then
Rows(RowMdx).Delete

End If
Next RowMdx
End Sub

How do I put the OR condition in this for Data Telecom and possibly more
conditions?

Any help appreciated,,,,,,thanks
 
D

Dave Peterson

If the number of options is small, you can use something like:

if lcase(Cells(RowMdx, "M").Value) = lcase("Server/Midrange Software") _
or lcase(Cells(RowMdx, "M").Value) = lcase("Data Telecom") _
or lcase(Cells(RowMdx, "M").Value) = lcase("some other value") _
'keep it
else
rows(rowmdx).delete
end if

When the number of entries gets bigger, you may want to use a different
approach...

Dim res as variant
dim myList as variant

mylist = array("Server/Midrange Software", _
"Data Telecom", _
"some other value")

....

for RowMdx = LastRow To 1 Step -1
res = application.match(cells(rowmdx,"M").value, mylist,0)

if isnumber(res) then
'there was a match, skip it
else
Rows(RowMdx).Delete
End If
Next RowMdx

The worksheet function =match() isn't case sensitive.
 
M

Mike

I tried this below but it deletes every record.

Sub TryMe()
'Deletes rows where the value in column M is not equal to Server/Midrange
Software
Dim RowMdx As Long
Dim LastRow As Long

LastRow = Cells(Rows.Count, "M").End(xlUp).Row

For RowMdx = LastRow To 1 Step -1
If LCase(Cells(RowMdx, "M").Value) <> LCase("Server/Midrange Software") _
Or LCase(Cells(RowMdx, "M").Value) <> LCase("Data Telecom") Then
Rows(RowMdx).Delete
End If

Next RowMdx
End Sub

When I use this it deletes only Server/Midrange Software

Sub TryMe()
'Deletes rows where the value in column M is not equal to Server/Midrange
Software
Dim RowMdx As Long
Dim LastRow As Long

LastRow = Cells(Rows.Count, "M").End(xlUp).Row

For RowMdx = LastRow To 1 Step -1
If Cells(RowMdx, "M").Value <> "Server/Midrange Software" Then
Rows(RowMdx).Delete
End If

Next RowMdx

End Sub


So I need obviously I am doing something wrong with the first Macro..

Any Help?
 
D

Dave Peterson

Change the OR to AND.

Or use OR and Else like I did.


I tried this below but it deletes every record.

Sub TryMe()
'Deletes rows where the value in column M is not equal to Server/Midrange
Software
Dim RowMdx As Long
Dim LastRow As Long

LastRow = Cells(Rows.Count, "M").End(xlUp).Row

For RowMdx = LastRow To 1 Step -1
If LCase(Cells(RowMdx, "M").Value) <> LCase("Server/Midrange Software") _
Or LCase(Cells(RowMdx, "M").Value) <> LCase("Data Telecom") Then
Rows(RowMdx).Delete
End If

Next RowMdx
End Sub

When I use this it deletes only Server/Midrange Software

Sub TryMe()
'Deletes rows where the value in column M is not equal to Server/Midrange
Software
Dim RowMdx As Long
Dim LastRow As Long

LastRow = Cells(Rows.Count, "M").End(xlUp).Row

For RowMdx = LastRow To 1 Step -1
If Cells(RowMdx, "M").Value <> "Server/Midrange Software" Then
Rows(RowMdx).Delete
End If

Next RowMdx

End Sub

So I need obviously I am doing something wrong with the first Macro..

Any Help?
 
D

Dave Peterson

Ps. Notice that I used OR and ELSE and a comparison operator of =.

I find that easier to understand.
 

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