Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / Programming / May 2007

Tip: Looking for answers? Try searching our database.

Cells.Find Causing Serious Lag

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Kigol - 16 May 2007 16:15 GMT
Hey All,

Long time user, never posted though. Here I have about 15,000 rows of
data, all which have formulas in columns K:V. I select all of the rows
which contain a "9" in column T as the value in the cell and cut and
insert them into another sheet. The sorting is of course speedy and
the macro will eventually do it's job, but it takes a LONG time for it
to find the first cell with a "9". Since the largest value for column
T is a "9", the sort puts all of the data at the bottom of the list
which is part of the problem I'm sure. But reversing the logic will
only start the find at the bottom instead and still have to go through
the entire list. Is there a way to speed this up at all?

   Dim rng As Range

   Application.ScreenUpdating = False

   Sheets("Summary").Rows("6:20000").Select
   Selection.Sort Key1:="Pricing Bucket", Order1:=xlAscending,
Key2:="On Private List?", Order2:=xlAscending, Header:=xlYes

   Range("T6").Select
   Set rng = Cells.Find(What:="9", After:=ActiveCell,
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:=False)
   If rng Is Nothing Then
       End
   Else
       Range("T6").Select
       Range(Cells.Find(What:="9", After:=ActiveCell,
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:=False).EntireRow,
ActiveCell.Offset(0, -15).End(xlDown).Offset(0, 15).EntireRow).Select
       Selection.Cut
       Sheets("Excluded List").Activate
       Rows("7").Insert
       Sheets("Summary").Activate
   End If
Kigol - 16 May 2007 16:35 GMT
Ok so I placed a break after the find method and it returns the
"Object variable or with block variable not set" error. So maybe there
is something else wrong?
JLGWhiz - 16 May 2007 20:56 GMT
This is the almost the same as the one I offered under your other posting.  
Test it on a copy before installing in your original.

Sub Tst()
Application.ScreenUpdating = False
   Sheets("Summary").Rows("6:20000").Select
   Selection.Sort Key1:="Pricing Bucket", Order1:=xlAscending, Key2:="On
Private List?", Order2:=xlAscending, Header:=xlYes
   lastRow = Cells(Rows.Count, 20).End(xlUp).Row
       With Worksheets(1).Range("T6:T" & lastRow)
           Set c = .Find(9, , LookIn:=xlValues, LookAt:=xlWhole,
SearchDirection:=xlNext)
               If c Is Nothing Then
                   Exit Sub
               Else
                   rng = c.Address
                   .Range(Cells(Range(rng).Row, 1), Cells(lastRow,
256)).Select
                   Selection.Cut
                   Sheets("Excluded List").Activate
                   Rows("7").Insert
                   Sheets("Summary").Activate
               End If
       End With

End Sub

> Hey All,
>
[quoted text clipped - 34 lines]
>         Sheets("Summary").Activate
>     End If
Kigol - 17 May 2007 16:48 GMT
c keeps returning nothing so I changed With Worksheets(1). to With
Activesheet.
It then finds the correct cell but errors
on .Range(Cells(Range(rng).Row, 1), Cells(lastRow,
256)).Select with an Application or object defined error. But all in
all it runs MUCH faster. Thank you.
Kigol - 17 May 2007 18:14 GMT
Here are the mods I did. It works perfectly now. Thanks again.

Sub Tst()
   Application.ScreenUpdating = False
   Sheets("Summary").Rows("6:20000").Select
   Selection.Sort Key1:="Pricing Bucket", Order1:=xlAscending,
Key2:="On Private List?", Order2:=xlAscending, Header:=xlYes

   lastRow = Cells(Rows.Count, 20).End(xlUp).Row
       With ActiveSheet.Range("T6:T" & lastRow)
           Set c = .Find(9, , LookIn:=xlValues, LookAt:=xlWhole,
SearchDirection:=xlNext)
               If Not c Is Nothing Then

                   rng = c.Address
                   firstrow = c.Row
                   Range(Cells(firstrow, 1), Cells(lastRow,
256)).Select
                   Selection.Cut
                   Sheets("Excluded List").Activate
                   Rows("7").Insert
                   Sheets("Summary").Activate
               End If
       End With

> This is the almost the same as the one I offered under your other posting.  
> Test it on a copy before installing in your original.
[quoted text clipped - 63 lines]
>
> - Show quoted text -
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.