Djauncey,

The code SHOULD work, and in fact did work on a test sheet that I worked with. If you are having problems, can you possibly post a copy of the workbook?

Also, I noticed an error in the code. In the code I wrote, I used the line:
lrow = Cells(Rows.Count, 1).End(xlUp).Row
to determine the last row of your range. This allows us to use a dynamic range and NOT use a fixed range.

That said, the following code checks expands the range to the used range within the worksheet:
     lrow = Cells(Rows.Count, 1).End(xlUp).Row
     Set r = Range("A3:A" & lrow)
THe range is now A3 to A and the last row. In your code, you used
     lrow = Cells(Rows.Count, 1).End(xlUp).Row
     Set r = Range("A3:A20000" & lrow)
Essentially, you used BOTH a fixed range AND the variable, which MAY be the cause of the problems. Amend that and see if it helps. If not, then post a copy of the book.