whenever I deal with big (long) XLS tables I use Filters rather than loops,
which is extremly fast. Additionally, disabling screen updating will
significantly improve execution speed. In your case it looks like the
autofilter's "custom" function (or the advanced filters) should work great.
Here is an extract of some code I use in one of my macros using the custom
autofilter:
Rows(1).Autofilter
Rows(1).Autofilter Field:=TRSC, Criteria1:=">=19", Operator:=xlAnd, _
Criteria2:="<27"
Range(Cells(2, PQAC), Cells(2, PQAC).End(xlDown)).Select
Selection.Replace What:="*", Replacement:="9999999999", LookAt:=xlWhole
This filters the data in column TRSC for values between "19" and "27". Then I
select the column PQAC and replace it's value by number "9999999999". rather
than replacing the value, you could just copy the selection to a new worksheet.
You may need to select the entire column in your case though.