ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Moving Average of values within an array (https://www.excelbanter.com/excel-programming/386643-moving-average-values-within-array.html)

Eric Johnson

Moving Average of values within an array
 
What is the best way to calculate moving averages within VBA? I have an
array of values: MyArray(1 to 1000, 1 to 1)
I would like to fill MyOtherArray(1 to 1000, 1 to 1) with 50-value moving
averages of the values in MyArray.
So for x=1 to 49, MyOtherArray(x,1) would be equal to #N/A, because there
are not yet 50 values to average
For x=50, MyOtherArray(50,1) would be equal to the average of the first 50
values of MyArray.

If I were calculating moving averages in a worksheet, I would take the
average of 50 cell ranges using the offset function. What would be a good
way to do this within VBA?

Thanks!


Barb Reinhardt

Moving Average of values within an array
 
SumArray = 0
For i = 1 to 1000
SumArray = myArray(i,1) + SumArray
if i< 50 then
MyOtherArray(i,1) = "N/A"
elseif i 50 then
SumArray = SumArray - myArray(i-50,1)
MyOtherArray(i,1) = SumArray/50
end if
next i

I think that's what you want. It ain't elegant, but I think it works.

"Eric Johnson" wrote:

What is the best way to calculate moving averages within VBA? I have an
array of values: MyArray(1 to 1000, 1 to 1)
I would like to fill MyOtherArray(1 to 1000, 1 to 1) with 50-value moving
averages of the values in MyArray.
So for x=1 to 49, MyOtherArray(x,1) would be equal to #N/A, because there
are not yet 50 values to average
For x=50, MyOtherArray(50,1) would be equal to the average of the first 50
values of MyArray.

If I were calculating moving averages in a worksheet, I would take the
average of 50 cell ranges using the offset function. What would be a good
way to do this within VBA?

Thanks!



All times are GMT +1. The time now is 01:23 PM.

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