Without knowing more specifics it's hard to give definitive answer but always a good idea to optimise your environment, and avoid native copies etc {in my experience!}
The below is a quick update on your code - including some environment settings, and tmpArray use etc...
I'd suggest replacing reference to ActiveSheet with the Sheets("name") reference, unless it's meant to vary on activation of routine.
On a final aside, I'm assuming (given explicit reference to row 2500) that you have lots of blanks in these worksheets, else you will end up overwriting data generated on previous worksheet iterations.
If the above is true you can likely use a different construct to identify populated area on your precedent worksheet(s) as opposed to fixing on a hard coded range.
Bookmarks