Mike,
My sincere thanks - works perfectly. Now all I've got to do is understand it :-)
You're welcome and thanks for the feedback. Here's the code agin with comments which may help in understanding
Sub Delete_Me()
'Dim variables and this time
'I remembered to do lMaxNew & lMaxold
Dim vNew As Range, vOLD As Range, c As Range
Dim CopyRange As Range
Dim lMaxNew As Long, lMaxOld As Long
'find last row with data ib col c
lMaxNew = Sheets("data").Range("C1").CurrentRegion.Rows.Count
'Create a range using the last row
Set vNew = Sheets("data").Range("c1:c" & lMaxNew)
'Repeat the above for 'Previous scores' worksheet
lMaxOld = Sheets("previous scores").Range("a1").CurrentRegion.Rows.Count
Set vOLD = Sheets("previous scores").Range("a1:a" & lMaxOld)
'Set up a loop to test each cell in vOLD
For Each c In vOLD
'If this line produces an error then it can't find a
'match for the cell be tested in vOLD in the range
'set up on sheets 'DATA'
If IsError(Application.Match(c.Value, vNew, 0)) Then
'if a match isn't found the this executes. Copyrange
'is a range and the first line tests if the range contains any
'range objects. It won't contain any for the first time this executes
If CopyRange Is Nothing Then
'So if there are no range objects in Copyrange
' we add the entire row to the copyrange
Set CopyRange = c.EntireRow
Else
'For a second and subsequent pass then we add the
'row to the rows already in Copyrange using the UNION method
'Note that UNION is OK but can become very slow when dealing with
'large ranges
Set CopyRange = Union(CopyRange, c.EntireRow)
End If
End If
' Go back to the start and test the next cell
Next
'Once we've finished testing all cells we must test
'if any rows have been added to Copyrange because
'if the range is nothing (empty) and we try to delete it
'we'll get an error
If Not CopyRange Is Nothing Then
CopyRange.Delete
End If
End Sub