Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default making macro run faster?

hi,

currently i´m using this loop

x = 1

While Cells(x, 1) < "Endlog"
If Cells(x, 4) = "INFORMATION" Then
Range("A" & x & ":K" & x).Select
Range("A" & x & ":K" & x).Delete
x = x - 1
End If

x = x + 1

Wend

in a macro to delete all rows from a sheet that contain the ter
information in column 4, it´s for log file viewing.

endlog is the last word in the sheet.
it works fine, but:

deleting up to 30.000 rows in a sheet this way takes quite a long time
up to half an hour... is there any way to make the task run faster?
with a do...loop or any other, faster working loop

--
Message posted from http://www.ExcelForum.com

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default making macro run faster?

Ues a cells.find to find the information then instead of select the
delete at the end of the
cells.find (what:="your term").entirerow.delete

That will stop the program from looking at every row.

Keith
www.kjtfs.co

--
Message posted from http://www.ExcelForum.com

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default making macro run faster?

A couple of other options to try.

Rather than do a While loop testing for a string (very inefficient), why not
do a Find on that string, and get the row number of the found cell, and do a
simple For ... Next loop, like so

For x = cLastRow To 1 Step -1
'...
Next x

where cLastRow is a Long variable holding the found cell row. Also removes
the x increment step, VBA does it implicitly.

Secondly, rather than delete as you go, build up a simple range union of
matched cells, and delete them at the end. For example

For x = cLastRow To 1 Step -1
If Cells(x, 4) = "INFORMATION" Then
If oRng Is Nothing Then
Set oRng = Range("A" & x & ":K" & x)
Else
Set oRng = Union( oRng, Range("A" & x & ":K" & x))
End If End If
Next x
If Not oRng Is Nothing Then oRng.Delete

There is also more built-in error handling in these techniques. It may not
be faster, but worth a try.

Oh, and turn ScreenUpdating off.


--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)

"KJTFS " wrote in message
...
Ues a cells.find to find the information then instead of select then
delete at the end of the
cells.find (what:="your term").entirerow.delete

That will stop the program from looking at every row.

Keith
www.kjtfs.com


---
Message posted from http://www.ExcelForum.com/



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default making macro run faster?

If you will be deleting less than 8192 rows, you can use something like this

Sub DeleteRows
Dim rng as Range
Columns("D:D").Replace What:="INFORMATION", _
Replacement:="=NA()", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
set rng = Columns(4).SpecialCells(xlCellTypeFormulas, 16)
rng.EntireRow.Delete
End Sub

If it would be more than 8192 rows, then I would still use this approach,
but do it in 2 or 3 sections (each of less than 8192 rows)

--
Regards,
Tom Ogilvy


"goorooj " wrote in message
...
hi,

currently i´m using this loop

x = 1

While Cells(x, 1) < "Endlog"
If Cells(x, 4) = "INFORMATION" Then
Range("A" & x & ":K" & x).Select
Range("A" & x & ":K" & x).Delete
x = x - 1
End If

x = x + 1

Wend

in a macro to delete all rows from a sheet that contain the term
information in column 4, it´s for log file viewing.

endlog is the last word in the sheet.
it works fine, but:

deleting up to 30.000 rows in a sheet this way takes quite a long time,
up to half an hour... is there any way to make the task run faster?
with a do...loop or any other, faster working loop?


---
Message posted from http://www.ExcelForum.com/



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,071
Default making macro run faster?

Consider adapting the suggestions in http://groups.google.com/groups?
selm=MPG.15e9939057ed7a1998a1e9%40msnews.microsoft .com

Though, with the added knowledge of 2-1/2 years after that post, I
probably wouldn't use option #3 for a very large data set. The Union
method can become painfully slow.

--
Regards,

Tushar Mehta, MS MVP -- Excel
www.tushar-mehta.com
Excel, PowerPoint, and VBA add-ins, tutorials
Custom MS Office productivity solutions

In article , goorooj
says...
hi,

currently i=3Fm using this loop

x = 1

While Cells(x, 1) < "Endlog"
If Cells(x, 4) = "INFORMATION" Then
Range("A" & x & ":K" & x).Select
Range("A" & x & ":K" & x).Delete
x = x - 1
End If

x = x + 1

Wend

in a macro to delete all rows from a sheet that contain the term
information in column 4, it=3Fs for log file viewing.

endlog is the last word in the sheet.
it works fine, but:

deleting up to 30.000 rows in a sheet this way takes quite a long time,
up to half an hour... is there any way to make the task run faster?
with a do...loop or any other, faster working loop?


---
Message posted from http://www.ExcelForum.com/




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 102
Default making macro run faster?

You don't need to select or delete.
Can you not sort it?
If you insert a column and use a formula to find your string.

[YourRange].formula = "=IF(D2="INFORMATION",0,"ZZ")

YourRange is the range of the column adjacent to your data.
Sort with this column then delete or Clear (preferably) the rows with 0.
If you need a macro just record the process.
Or have a look at this one. (Here I assumed you have headers in
A1 to F1, and the formula column is the 6th one)


Sub DellInfo()
[F2:F30000].Formula = "=IF(D2=""INFORMATION"",0,""ZZ"")"
[A1:F30000].Sort key1:=[F2], order1:=xlAscending, header:=xlGuess
[A2].Resize(Application.Count([F2:F30000]), 6).Delete shift:=xlUp
End Sub


This will take about a second on a slow machine.
To delete the formula column via code
Columns(6).clear
I left it in to see the results, or for you to delete it manually.


Regards Robert

"goorooj " wrote in message ...
hi,

currently i´m using this loop

x = 1

While Cells(x, 1) < "Endlog"
If Cells(x, 4) = "INFORMATION" Then
Range("A" & x & ":K" & x).Select
Range("A" & x & ":K" & x).Delete
x = x - 1
End If

x = x + 1

Wend

in a macro to delete all rows from a sheet that contain the term
information in column 4, it´s for log file viewing.

endlog is the last word in the sheet.
it works fine, but:

deleting up to 30.000 rows in a sheet this way takes quite a long time,
up to half an hour... is there any way to make the task run faster?
with a do...loop or any other, faster working loop?


---
Message posted from http://www.ExcelForum.com/



---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.590 / Virus Database: 373 - Release Date: 17/02/2004


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
How can my macro run faster ? Roger[_2_] New Users to Excel 12 October 26th 09 12:57 PM
Making a spreadsheet calculate faster EricK Excel Discussion (Misc queries) 4 August 15th 07 10:08 PM
Making Windows XP Start 60% Faster Stranger Excel Discussion (Misc queries) 1 May 16th 07 10:06 PM
Can faster CPU+larger/faster RAM significantly speed up recalulati jmk_li Excel Discussion (Misc queries) 2 September 28th 05 10:24 AM
faster macro _______Tim_______ Excel Programming 6 August 28th 03 03:01 PM


All times are GMT +1. The time now is 05:43 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"