View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Jan Karel Pieterse Jan Karel Pieterse is offline
external usenet poster
 
Posts: 535
Default REPOST: Find a row and delete it

Hi,

You may find it better to do the search up-side-down,
otherwise you might miss out rows.

Also, it may be far more efficient to use excel's
autofilter method to first filter the rows using your del
criteria. Then delete the visible rows all in one go.

You might record a macro setting up the autofilter, then
pressing F5 (goto), special, visible cells only, then
doing the deletion. Then edit the recorded (bad) code to
generalise.

Regards,

Jan Karel Pieterse
Excel TA/MVP

-----Original Message-----
I posted this last week but the only person who showed an

interest
didn't suggest any specific improvements. I was mildly

surprised
because I would have though this was a common use of

Excel VBA.

My data is organised in rows of columns (like a database

table). I
want to look for the first occurrence of a value in a

certain column
and delete that row.

Below is my attempt. In case someone is in the know, I'm

trying to
implement a simplified version of the SQL DELETE command.

Can anyone
suggest improvements to my code?

Private Function DeleteByKey(ExcelRange As Excel.Range, _
ByVal KeyColumn As Long, _
ByVal KeyValue As Variant) As

Boolean

Dim vntArray As Variant
Dim lngRows As Long
Dim lngCounterRows As Long

vntArray = ExcelRange.Value
lngRows = UBound(vntArray, 1)

' Loop through rows and try to match key
For lngCounterRows = 1 To lngRows

If vntArray(lngCounterRows, KeyColumn) = KeyValue Then

' Match
ExcelRange.Rows(lngCounterRows).Delete xlShiftUp

DeleteByKey = True
Exit Function

End If

Next

' No match
DeleteByKey = False

End Function

Public Sub TestDeleteByKey()
If DeleteByKey(Range("Data"), 2, "Hip") Then
MsgBox "Row Successfully deleted."
Else
MsgBox "Failed", vbCritical
End If
End Sub

Many thanks.
.