1) Go ahead and break the habit of using .UsedRange in your method for determining the first and/or last row of data. It is full of holes and when it does break you won't know it, you just won't know it's doing wrong things to your data.
Instead, pick the row that always has data filled in, like column A, and just evaluate that column directly.
2) Before you run your loop, delete all the "error" rows first to speed up the process, they're no longer there to have to be evaluate. This one line of code will delete every row that has a formula in that results in an error in column A:
3) Maybe this then:
Bookmarks