The CountIf function is eating you up. A faster way would be to build a dictionary with the contents of column A as the keys. If you process the rows backwards like you are doing and try to add the current cell's contents to the dictionary, you will get a duplicate if there are already is one, so you can delete that row. The result is the same as what you are getting now, but the duplicates are the last entry rather than the first.