This question really should be a FAQ. I see it time and time again and looping just isn't the best way of doing this sort of thing.
Whenever you find yourself creating looping code stop and think is this really necessary? Most of the time it isn't. Loops are inherently slow when they have to jump back and forth between VBA and the Excel application - there's a big time overhead at each pass through the loop.
The fastest, most efficient and elegant way for this sort of stuff is to use an Autofilter to filter the rows you're interested in.
Then use syntax like
then paste to your destination cell.
This uses just one Copy / Paste instruction rather than many if you're looping through many cells.
I also think it's risky to use colours to identify cells, there are far too many. There's presumably some other marker, like the absence of a value in a cell that could be used to Autofilter the rows/range you need.
Bookmarks