deleting rows based on criteria

G

gbpg

I am copying a text file into excel (all one column A) from a database and
want to delete rows that have the following information:
the date for example 08/14/2008 followed by QMS Log Page 69 of 79 (this will
of course be 1 of 79 etc). I have tried to use some of the threads seen in
this discussion group in a macro but with no luck. My attempt is
Sub testme02()

Dim MyRng As Range
Dim FoundCell As Range
Dim wks As Worksheet
Dim myStrings As Variant
Dim iCtr As Long

myStrings = Array("QMS Log Page") 'add more strings if you need

Set wks = ActiveSheet

With wks
Set MyRng = .Range("a2:a" & .Rows.Count)
End With

For iCtr = LBound(myStrings) To UBound(myStrings)
Do
With MyRng
Set FoundCell = .Cells.Find(what:=myStrings(iCtr), _
after:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
lookat:=xlWhole, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=False)

If FoundCell Is Nothing Then
Exit Do
Else
FoundCell.EntireRow.Delete
End If
End With
Loop
Next iCtr
End Sub
 
J

james.billy

Sorry that does not help

Try this...

Dim MyRng As Range
Dim FoundCell As Range
Dim wks As Worksheet
Dim myStrings As Variant
Dim iCtr As Long

myStrings = Array("QMS Log Page") 'add more strings if you need

Set wks = ActiveSheet

With wks
Set MyRng = .Range("a2:a" & .Rows.Count)
End With

For iCtr = LBound(myStrings) To UBound(myStrings)
Do
With MyRng
Set FoundCell = .Cells.Find what:= "*" &
myStrings(iCtr) & "*" ' this will find anything that contains your
sting
If FoundCell Is Nothing Then
Exit Do
Else
FoundCell.EntireRow.Delete
End If
End With
Loop
Next iCtr
End Sub

Looking at your original code there were two lines that jumped out...

lookat:=xlWhole - You said your string starts with a date then QMS
etc. this would only find those cells that match exactly "QMS Log
Page"
after:=.Cells(.Cells.Count) - I am not sure what the point of this is?

James
 
J

james.billy

Try this...

    Dim MyRng As Range
    Dim FoundCell As Range
    Dim wks As Worksheet
    Dim myStrings As Variant
    Dim iCtr As Long

    myStrings = Array("QMS Log Page") 'add more strings if you need

    Set wks = ActiveSheet

    With wks
        Set MyRng = .Range("a2:a" & .Rows.Count)
    End With

    For iCtr = LBound(myStrings) To UBound(myStrings)
        Do
            With MyRng
                Set FoundCell = .Cells.Find what:= "*" &
myStrings(iCtr) & "*" ' this will find anything that contains your
sting
                If FoundCell Is Nothing Then
                    Exit Do
                Else
                    FoundCell.EntireRow.Delete
                End If
            End With
        Loop
    Next iCtr
End Sub

Looking at your original code there were two lines that jumped out...

lookat:=xlWhole - You said your string starts with a date then QMS
etc. this would only find those cells that match exactly "QMS Log
Page"
after:=.Cells(.Cells.Count) - I am not sure what the point of this is?

James

Thinking about it would it not be easier just to use the autofilter?

Dim MyRng As Range
Dim FoundCell As Range
Dim wks As Worksheet
Dim myStrings As Variant
Dim iCtr As Long

myStrings = Array("QMS Log Page") 'add more strings if you need

Set wks = ActiveSheet

With wks
Set MyRng = .Range("a2:a" & .Rows.Count)
set MyDeleteRng = .Range("a3:a" & .rows.count) ' This assumes
header information in row 2?
End With

For iCtr = LBound(myStrings) To UBound(myStrings)
MyRng.Autofilter 1, "*" myStrings(iCtr) & "*"
MyDeleteRng.entirerow.delete
Next iCtr
myRng.AutofIlter ' switch the autofilter off
End Sub

James
 
J

james.billy

Thinking about it would it not be easier just to use the autofilter?

    Dim MyRng As Range
    Dim FoundCell As Range
    Dim wks As Worksheet
    Dim myStrings As Variant
    Dim iCtr As Long

    myStrings = Array("QMS Log Page") 'add more strings if you need

    Set wks = ActiveSheet

    With wks
        Set MyRng = .Range("a2:a" & .Rows.Count)
        set MyDeleteRng = .Range("a3:a" & .rows.count) ' This assumes
header information in row 2?
    End With

    For iCtr = LBound(myStrings) To UBound(myStrings)
        MyRng.Autofilter 1, "*" myStrings(iCtr) & "*"
        MyDeleteRng.entirerow.delete
    Next iCtr
    myRng.AutofIlter ' switch the autofilter off
End Sub

James

This line:

MyRng.Autofilter 1, "*" myStrings(iCtr) & "*"

should be:

MyRng.Autofilter 1, "*" & myStrings(iCtr) & "*"

James
 
N

NoodNutt

try this

Although not tested.

Sub Remove_Foreign()

Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long

With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
End With

With Sheets("yoursheet")
.Select
Firstrow = yourfirstrow
Lastrow = yourlastrow

For Lrow = Lastrow To Firstrow Step -1

With .Cells(Lrow, "A")

If Not IsError(.Value) Then

If .Value = "*"&"QMS"&"*" Then .EntireRow.ClearContents

End If

End With

Next Lrow

End With

With Application
CalcMode = .Calculation
.Calculation = xlAutomatic
End With

End Sub

HTH
Mark.
 
G

gbpg

Hey thanks James,
the following seemed to delete the row
Dim MyRng As Range
Dim FoundCell As Range
Dim wks As Worksheet
Dim myStrings As Variant
Dim iCtr As Long

myStrings = Array("QMS Log Page")

Set wks = ActiveSheet

With wks
Set MyRng = .Range("A2:A" & .Rows.Count)
Set MyDeleteRng = .Range("A3:A" & .Rows.Count)

End With

For iCtr = LBound(myStrings) To UBound(myStrings)
MyRng.AutoFilter 1, "*" & myStrings(iCtr) & "*"
MyDeleteRng.EntireRow.Delete
Next iCtr
MyRng.AutoFilter 'switches autofilter off
End Sub

Now I will have to try and do some other tricks, like formatting, I will
post this as a seperate question.
 

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