View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
Bernie Deitrick Bernie Deitrick is offline
external usenet poster
 
Posts: 5,441
Default Fast Way to Delete Rows from Big Spreadsheet (Using VBA)

Anytime you delete a row or block of contiguous rows, Excel moves everything
up in its memory by the number of rows deleted, which takes time. Do that
a few thousand times, and you can take a few seconds or minutes to delete
the rows. The best way is to write your macro to

1) insert a new column
2) insert a TRUE FALSE formula into the column
3) sort the table based on that column
4) delete cells with either TRUE or FALSE, in one block.

HTH,
Bernie
MS Excel MVP

"LarryP" wrote in message
...
Excel 2003, big spreadsheet, ~20000 rows, Col. B contains text values like
"1000", "1070", and "1120". Users sometimes want to quickly delete all
the
rows except those with one specific value in that Column. I've tried a
couple approaches and run into (different) grief in each case. With a
"For
each row in used range" looping solution, it runs very slowly with that
many
rows. With a not-equal-to Autofilter, then deleting all result rows, it's
much faster but doesn't always filter correctly with Criterion:="<1000"
for
some reason, haven't been able to figure out why. (Clarification: it
hiccups
no matter what value is specified, not just 1000.) When it works it's
just
what I want, but the next time with no apparent rhyme or reason it'll
leave
in the specified value, and poof!, the user winds up with a completely
blank
spreadsheet.

Any thoughts? In particular, is there any way BESIDES these two that
would
run really fast? I'm constantly finding out about cool built-ins in Excel
that I wasn't aware of, so I'm hoping there's one for this situation.