Revision: 69070
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 14, 2015 08:58 by BDOGG32
Initial Code
Public Function CMA(vA As Variant, iSteps As Long) As Variant
Dim row As Long
Dim iRows As Long
Dim dblSum As Double
Dim vAVG As Variant
On Error GoTo ErrorHandler
vA = vA.Value2
iRows = UBound(vA)
ReDim vAVG(iSteps To iRows, 1 To 1)
For row = 1 To iRows
dblSum = dblSum + vA(row, 1)
If row >= iSteps Then
If row > iSteps Then dblSum = dblSum - vA(row - iSteps, 1)
vAVG(row, 1) = dblSum / iSteps
End If
Next
'If Not iSteps Mod 2 Then
' Daniel Says: This was my mistake.
' The above line of code uses logic that
' we would use with worksheet formulas.
' The below line of code is the way I
' should have written it for VBA.
If iSteps Mod 2 = 0 Then
For row = iSteps To iRows - 1
vAVG(row, 1) = (vAVG(row, 1) + vAVG(row + 1, 1)) / 2
Next
vAVG(row, 1) = (vAVG(row, 1) * iSteps * 2 - vA(row - iSteps + 1, 1)) / (iSteps * 2 - 1)
End If
CMA = vAVG
Exit Function
ErrorHandler:
CMA = CVErr(xlErrValue)
End Function
Initial URL
Initial Description
Calculates the center moving average for a time period. The vA requires a range or an array of numbers and the iSteps takes the number of periods in the timeframe (4 for quarters, 7 for weekly, ect)
Initial Title
Calculate the Center Moving Average
Initial Tags
code, function, excel
Initial Language
Visual Basic