ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   More efficient way to calculate values (https://www.excelbanter.com/excel-programming/349027-more-efficient-way-calculate-values.html)

Marw

More efficient way to calculate values
 

Hi,
I'm trying to make a function that sums values from calls that have th
same outline level. Idea is to calculate only cells until the next uppe
level cell.

Here is what I have done, but this function seems to be ver
unefficient when I'm using that in many cells to calculate quite larg
amount of data.

Do you have any ideas how to make the same more efficient way?


Function OutlineLevelSum(iLevel As Integer, rSumRange As Range)
Dim rCell As Range
Dim vResult

For Each rCell In rSumRange
If Rows(rCell.Row).OutlineLevel = iLevel Then
vResult = vResult + rCell.Value
ElseIf Rows(rCell.Row).OutlineLevel < iLevel Then
Exit For
End If
Next rCell

OutlineLevelSum = vResult
End Functio

--
Mar
-----------------------------------------------------------------------
Marw's Profile: http://www.excelforum.com/member.php...fo&userid=2993
View this thread: http://www.excelforum.com/showthread.php?threadid=49635


Niek Otten

More efficient way to calculate values
 
Maybe declaring the function itself as Double helps a bit (Function
OLS(....) as Double)
It avoids one Variant addition per cycle.
I always use Long instead of Integer because that is the basic unit in
32-bit systems. But there may be leftover instructions for Integers, I don't
know. Just try.

--
Kind regards,

Niek Otten

"Marw" wrote in message
...

Hi,
I'm trying to make a function that sums values from calls that have the
same outline level. Idea is to calculate only cells until the next upper
level cell.

Here is what I have done, but this function seems to be very
unefficient when I'm using that in many cells to calculate quite large
amount of data.

Do you have any ideas how to make the same more efficient way?


Function OutlineLevelSum(iLevel As Integer, rSumRange As Range)
Dim rCell As Range
Dim vResult

For Each rCell In rSumRange
If Rows(rCell.Row).OutlineLevel = iLevel Then
vResult = vResult + rCell.Value
ElseIf Rows(rCell.Row).OutlineLevel < iLevel Then
Exit For
End If
Next rCell

OutlineLevelSum = vResult
End Function


--
Marw
------------------------------------------------------------------------
Marw's Profile:
http://www.excelforum.com/member.php...o&userid=29934
View this thread: http://www.excelforum.com/showthread...hreadid=496352




Marw[_2_]

More efficient way to calculate values
 

Thanks for the idea. I did that but it doesn't seem to affect much.


--
Marw
------------------------------------------------------------------------
Marw's Profile: http://www.excelforum.com/member.php...o&userid=29934
View this thread: http://www.excelforum.com/showthread...hreadid=496352



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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com