Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Q re program speed, with 15k lines of data

Hi,

Can anyone shed any light on the problem i'm having with following macro.
I have 15k lines of data on a worksheet. My program examines each line with
an if statement and depending on result inserts 3 new lines, adds 15 cells of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of data to
<8,000 then the program runs in about 7-8 secs. If i try to run the program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to add
something else.
TIA.



--
John
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,452
Default Q re program speed, with 15k lines of data

Seeing the code will help.

Maybe what can speed this up is putting the data in an array, examine that
array, write to a second array and at the end write that second array back
to a sheet.

RBS

"asyado" wrote in message
...
Hi,

Can anyone shed any light on the problem i'm having with following macro.
I have 15k lines of data on a worksheet. My program examines each line
with
an if statement and depending on result inserts 3 new lines, adds 15 cells
of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of data
to
<8,000 then the program runs in about 7-8 secs. If i try to run the
program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to add
something else.
TIA.



--
John


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Q re program speed, with 15k lines of data

Hi RB.

I see your point about the arrays. You will see from my code below that i'm
inserting "vlookup" formulas, i should put that data into an array as an
initial procedure and then populate the cells from there!?

The thing is i guessed there were a couple of things to spped up my code,
but i couldn't understand why the code would run so quickly with say less
than 8000 lines, but then the performance dropped so substantially /
exponentially after that!

notes: int_Rows is calc'd earlier in the program to find the last row used.
the Do While loop operates on a cell that contains a recipe name. There are
many recipe_lines per recipe name. Each time a recipe name changes i want 3
lines to be inserted and be populated with data -some from another worksheet,
some static.

Thanking you.

n = 3
i = int_Rows + 2
Do While n < i
If Cells(n, 1) < Cells(n - 1, 1) Then
Rows(n).Insert
Rows(n).Insert
Rows(n).Insert
Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code
' Enter Material Output information
Cells(n, 2) = 1
Cells(n, 4) = 980
Cells(n, 5) = 5
Cells(n, 6) = "AR"
Cells(n, 7) = "AR"
Cells(n, 8) = "I"
Cells(n, 9) = VBA.CStr(VBA.Left(Previous_Recipe_Code, 6) & "MIX")
Cells(n, 10) = "B1"
Cells(n, 13) = 98
Cells(n, 14) = "KG"
Cells(n, 15) = "Y"
Cells(n, 16) = "N"
' enter labor information
Cells(n + 1, 2) = 1
Cells(n + 1, 4) = 960
Cells(n + 1, 5) = 2
Cells(n + 1, 6) = "BL"
Cells(n + 1, 7) = "BL"
Cells(n + 1, 12).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,3,0)"
Cells(n + 1, 18).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 1, 19) = "R"
Cells(n + 1, 24) = "N"
' Enter Machine Information
Cells(n + 2, 2) = 1
Cells(n + 2, 4) = 970
Cells(n + 2, 5) = 3
Cells(n + 2, 6) = "BO"
Cells(n + 2, 7) = "BO"
Cells(n + 2, 11) = "Machine"
Cells(n + 2, 11).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,2,0)"
Cells(n + 2, 18).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 2, 19) = "R"
Cells(n + 2, 22) = 0
Cells(n + 2, 23) = "M"
Cells(n + 2, 24) = "N"
n = n + 2
i = i + 3
End If
n = n + 1
Loop
--
John


"RB Smissaert" wrote:

Seeing the code will help.

Maybe what can speed this up is putting the data in an array, examine that
array, write to a second array and at the end write that second array back
to a sheet.

RBS

"asyado" wrote in message
...
Hi,

Can anyone shed any light on the problem i'm having with following macro.
I have 15k lines of data on a worksheet. My program examines each line
with
an if statement and depending on result inserts 3 new lines, adds 15 cells
of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of data
to
<8,000 then the program runs in about 7-8 secs. If i try to run the
program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to add
something else.
TIA.



--
John



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,452
Default Q re program speed, with 15k lines of data

I take it the slowness has to do with the lookup.
Would it help to put the lookup table in the same workbook?

I wouldn't think it slows things down much, but is this neccessary?

Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code

Can't you just do:
Cells(n, 1) = Cells(n - 1, 1)
etc.

Maybe the main thing though is that you have set calculation to automatic.

I think you will have to do:
Application.Calculation = xlManual
before you start the loop and then do:
Application.Calculate
Application.Calculation = xlAutomatic
when the loop is finished.

If that doesn't work with your setup (giving the wrong data) then you my
have to revise your code.
I am not much into worksheet functions and tend to do evertything in VBA,
but maybe this will give you some ideas.
I still think doing the whole thing in arrays will be much faster.


RBS



"asyado" wrote in message
...
Hi RB.

I see your point about the arrays. You will see from my code below that
i'm
inserting "vlookup" formulas, i should put that data into an array as an
initial procedure and then populate the cells from there!?

The thing is i guessed there were a couple of things to spped up my code,
but i couldn't understand why the code would run so quickly with say less
than 8000 lines, but then the performance dropped so substantially /
exponentially after that!

notes: int_Rows is calc'd earlier in the program to find the last row
used.
the Do While loop operates on a cell that contains a recipe name. There
are
many recipe_lines per recipe name. Each time a recipe name changes i want
3
lines to be inserted and be populated with data -some from another
worksheet,
some static.

Thanking you.

n = 3
i = int_Rows + 2
Do While n < i
If Cells(n, 1) < Cells(n - 1, 1) Then
Rows(n).Insert
Rows(n).Insert
Rows(n).Insert
Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code
' Enter Material Output information
Cells(n, 2) = 1
Cells(n, 4) = 980
Cells(n, 5) = 5
Cells(n, 6) = "AR"
Cells(n, 7) = "AR"
Cells(n, 8) = "I"
Cells(n, 9) = VBA.CStr(VBA.Left(Previous_Recipe_Code, 6) &
"MIX")
Cells(n, 10) = "B1"
Cells(n, 13) = 98
Cells(n, 14) = "KG"
Cells(n, 15) = "Y"
Cells(n, 16) = "N"
' enter labor information
Cells(n + 1, 2) = 1
Cells(n + 1, 4) = 960
Cells(n + 1, 5) = 2
Cells(n + 1, 6) = "BL"
Cells(n + 1, 7) = "BL"
Cells(n + 1, 12).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,3,0)"
Cells(n + 1, 18).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 1, 19) = "R"
Cells(n + 1, 24) = "N"
' Enter Machine Information
Cells(n + 2, 2) = 1
Cells(n + 2, 4) = 970
Cells(n + 2, 5) = 3
Cells(n + 2, 6) = "BO"
Cells(n + 2, 7) = "BO"
Cells(n + 2, 11) = "Machine"
Cells(n + 2, 11).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,2,0)"
Cells(n + 2, 18).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 2, 19) = "R"
Cells(n + 2, 22) = 0
Cells(n + 2, 23) = "M"
Cells(n + 2, 24) = "N"
n = n + 2
i = i + 3
End If
n = n + 1
Loop
--
John


"RB Smissaert" wrote:

Seeing the code will help.

Maybe what can speed this up is putting the data in an array, examine
that
array, write to a second array and at the end write that second array
back
to a sheet.

RBS

"asyado" wrote in message
...
Hi,

Can anyone shed any light on the problem i'm having with following
macro.
I have 15k lines of data on a worksheet. My program examines each line
with
an if statement and depending on result inserts 3 new lines, adds 15
cells
of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of
data
to
<8,000 then the program runs in about 7-8 secs. If i try to run the
program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to
add
something else.
TIA.



--
John




  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Q re program speed, with 15k lines of data

Hiya,

I think you're right, i didn't attribute much to the vlookup when the macro
ran quickly on my (small) test data set, but I should change it.
I'll post a reply with results to this thread in the next day or so, if you
want to check them out. Thanks for your suggestions.

BTW, oops line: I actually have the application.calculation set to xlManual
before the loop, not auotmatic as i stated in my firt post.


--
John


"RB Smissaert" wrote:

I take it the slowness has to do with the lookup.
Would it help to put the lookup table in the same workbook?

I wouldn't think it slows things down much, but is this neccessary?

Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code

Can't you just do:
Cells(n, 1) = Cells(n - 1, 1)
etc.

Maybe the main thing though is that you have set calculation to automatic.

I think you will have to do:
Application.Calculation = xlManual
before you start the loop and then do:
Application.Calculate
Application.Calculation = xlAutomatic
when the loop is finished.

If that doesn't work with your setup (giving the wrong data) then you my
have to revise your code.
I am not much into worksheet functions and tend to do evertything in VBA,
but maybe this will give you some ideas.
I still think doing the whole thing in arrays will be much faster.


RBS



"asyado" wrote in message
...
Hi RB.

I see your point about the arrays. You will see from my code below that
i'm
inserting "vlookup" formulas, i should put that data into an array as an
initial procedure and then populate the cells from there!?

The thing is i guessed there were a couple of things to spped up my code,
but i couldn't understand why the code would run so quickly with say less
than 8000 lines, but then the performance dropped so substantially /
exponentially after that!

notes: int_Rows is calc'd earlier in the program to find the last row
used.
the Do While loop operates on a cell that contains a recipe name. There
are
many recipe_lines per recipe name. Each time a recipe name changes i want
3
lines to be inserted and be populated with data -some from another
worksheet,
some static.

Thanking you.

n = 3
i = int_Rows + 2
Do While n < i
If Cells(n, 1) < Cells(n - 1, 1) Then
Rows(n).Insert
Rows(n).Insert
Rows(n).Insert
Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code
' Enter Material Output information
Cells(n, 2) = 1
Cells(n, 4) = 980
Cells(n, 5) = 5
Cells(n, 6) = "AR"
Cells(n, 7) = "AR"
Cells(n, 8) = "I"
Cells(n, 9) = VBA.CStr(VBA.Left(Previous_Recipe_Code, 6) &
"MIX")
Cells(n, 10) = "B1"
Cells(n, 13) = 98
Cells(n, 14) = "KG"
Cells(n, 15) = "Y"
Cells(n, 16) = "N"
' enter labor information
Cells(n + 1, 2) = 1
Cells(n + 1, 4) = 960
Cells(n + 1, 5) = 2
Cells(n + 1, 6) = "BL"
Cells(n + 1, 7) = "BL"
Cells(n + 1, 12).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,3,0)"
Cells(n + 1, 18).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 1, 19) = "R"
Cells(n + 1, 24) = "N"
' Enter Machine Information
Cells(n + 2, 2) = 1
Cells(n + 2, 4) = 970
Cells(n + 2, 5) = 3
Cells(n + 2, 6) = "BO"
Cells(n + 2, 7) = "BO"
Cells(n + 2, 11) = "Machine"
Cells(n + 2, 11).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,2,0)"
Cells(n + 2, 18).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 2, 19) = "R"
Cells(n + 2, 22) = 0
Cells(n + 2, 23) = "M"
Cells(n + 2, 24) = "N"
n = n + 2
i = i + 3
End If
n = n + 1
Loop
--
John


"RB Smissaert" wrote:

Seeing the code will help.

Maybe what can speed this up is putting the data in an array, examine
that
array, write to a second array and at the end write that second array
back
to a sheet.

RBS

"asyado" wrote in message
...
Hi,

Can anyone shed any light on the problem i'm having with following
macro.
I have 15k lines of data on a worksheet. My program examines each line
with
an if statement and depending on result inserts 3 new lines, adds 15
cells
of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of
data
to
<8,000 then the program runs in about 7-8 secs. If i try to run the
program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to
add
something else.
TIA.



--
John






  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Q re program speed, with 15k lines of data

all,

FYI: i replaced the vlookup formalae in the code below so the info is
populated from an array.
New code ran in approx 32 secs (compared to approx 18 mins).


--
John


"asyado" wrote:

Hiya,

I think you're right, i didn't attribute much to the vlookup when the macro
ran quickly on my (small) test data set, but I should change it.
I'll post a reply with results to this thread in the next day or so, if you
want to check them out. Thanks for your suggestions.

BTW, oops line: I actually have the application.calculation set to xlManual
before the loop, not auotmatic as i stated in my firt post.


--
John


"RB Smissaert" wrote:

I take it the slowness has to do with the lookup.
Would it help to put the lookup table in the same workbook?

I wouldn't think it slows things down much, but is this neccessary?

Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code

Can't you just do:
Cells(n, 1) = Cells(n - 1, 1)
etc.

Maybe the main thing though is that you have set calculation to automatic.

I think you will have to do:
Application.Calculation = xlManual
before you start the loop and then do:
Application.Calculate
Application.Calculation = xlAutomatic
when the loop is finished.

If that doesn't work with your setup (giving the wrong data) then you my
have to revise your code.
I am not much into worksheet functions and tend to do evertything in VBA,
but maybe this will give you some ideas.
I still think doing the whole thing in arrays will be much faster.


RBS



"asyado" wrote in message
...
Hi RB.

I see your point about the arrays. You will see from my code below that
i'm
inserting "vlookup" formulas, i should put that data into an array as an
initial procedure and then populate the cells from there!?

The thing is i guessed there were a couple of things to spped up my code,
but i couldn't understand why the code would run so quickly with say less
than 8000 lines, but then the performance dropped so substantially /
exponentially after that!

notes: int_Rows is calc'd earlier in the program to find the last row
used.
the Do While loop operates on a cell that contains a recipe name. There
are
many recipe_lines per recipe name. Each time a recipe name changes i want
3
lines to be inserted and be populated with data -some from another
worksheet,
some static.

Thanking you.

n = 3
i = int_Rows + 2
Do While n < i
If Cells(n, 1) < Cells(n - 1, 1) Then
Rows(n).Insert
Rows(n).Insert
Rows(n).Insert
Previous_Recipe_Code = VBA.CStr(Cells(n - 1, 1))
Current_Recipe_Code = VBA.CStr(Cells(n + 3, 1))
Cells(n, 1) = Previous_Recipe_Code
Cells(n + 1, 1) = Current_Recipe_Code
Cells(n + 2, 1) = Current_Recipe_Code
' Enter Material Output information
Cells(n, 2) = 1
Cells(n, 4) = 980
Cells(n, 5) = 5
Cells(n, 6) = "AR"
Cells(n, 7) = "AR"
Cells(n, 8) = "I"
Cells(n, 9) = VBA.CStr(VBA.Left(Previous_Recipe_Code, 6) &
"MIX")
Cells(n, 10) = "B1"
Cells(n, 13) = 98
Cells(n, 14) = "KG"
Cells(n, 15) = "Y"
Cells(n, 16) = "N"
' enter labor information
Cells(n + 1, 2) = 1
Cells(n + 1, 4) = 960
Cells(n + 1, 5) = 2
Cells(n + 1, 6) = "BL"
Cells(n + 1, 7) = "BL"
Cells(n + 1, 12).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,3,0)"
Cells(n + 1, 18).Formula = "=vlookup(A" & n + 1 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 1, 19) = "R"
Cells(n + 1, 24) = "N"
' Enter Machine Information
Cells(n + 2, 2) = 1
Cells(n + 2, 4) = 970
Cells(n + 2, 5) = 3
Cells(n + 2, 6) = "BO"
Cells(n + 2, 7) = "BO"
Cells(n + 2, 11) = "Machine"
Cells(n + 2, 11).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,2,0)"
Cells(n + 2, 18).Formula = "=vlookup(A" & n + 2 &
",'[compm4.xls]Workings'!$A$2:$D$1500,4,0)"
Cells(n + 2, 19) = "R"
Cells(n + 2, 22) = 0
Cells(n + 2, 23) = "M"
Cells(n + 2, 24) = "N"
n = n + 2
i = i + 3
End If
n = n + 1
Loop
--
John


"RB Smissaert" wrote:

Seeing the code will help.

Maybe what can speed this up is putting the data in an array, examine
that
array, write to a second array and at the end write that second array
back
to a sheet.

RBS

"asyado" wrote in message
...
Hi,

Can anyone shed any light on the problem i'm having with following
macro.
I have 15k lines of data on a worksheet. My program examines each line
with
an if statement and depending on result inserts 3 new lines, adds 15
cells
of
data for each line, or else moves to the next line.
I have screenupdating set to false, xlcalculation set to xlAutomatic.

This is the part i find curious - if i limit the number of lines of
data
to
<8,000 then the program runs in about 7-8 secs. If i try to run the
program
with the full 15, lines it takes up to 18 mins to run.

Sorry if i've not provided all pertinant info, lemme know if i need to
add
something else.
TIA.



--
John




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
averaging lines of data at every ten lines MJ Excel Discussion (Misc queries) 5 December 29th 08 03:48 AM
Inserting Lines or Copying lines with formulas but without data wnfisba Excel Discussion (Misc queries) 2 August 18th 06 04:41 PM
Speed up Program Process maperalia Excel Programming 3 January 26th 06 07:54 PM
Free Tool (Add-in) To Speed Up Your Data Processing Danniel Chen Excel Worksheet Functions 0 May 23rd 05 09:11 PM
program speed problem chris[_3_] Excel Programming 1 September 11th 03 02:05 AM


All times are GMT +1. The time now is 02: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"