[英]Simple moving average range in Excel-VBA
该代码仅用于计算简单的移动平均线。 打开一个excel,在C行中从1到20创建了一个虚拟数组。我想为例如创建一个函数:SMA(C7,3)=应该提供C5:C7的平均值。
长时间后返回VBA,无法在下面的代码中找出错误。
Function sma1(rng As Range, N As Integer)
Set rng = rng.Resize(-N + 1, 0)
sma1 = Application.WorksheetFunction.average(rng)
End Function
RESIZE()
函数smal(rng作为范围,N作为整数)作为变量Dim rng2作为范围集rng2 = rng.Resize(N,1)smal = Application.WorksheetFunction.Average(rng2)结束函数
编辑#1:
根据Scott的评论:
Function smal(rng As Range, N As Integer) As Variant
Dim rng2 As Range
Set rng2 = rng.Offset(1 - N, 0).Resize(N, 1)
smal = Application.WorksheetFunction.Average(rng2)
End Function
我假设您希望柱子旁边有SMA(如下所示?):
如果是这样,下面将执行此操作并将其自动完成,并将其拖动到C列数组的底部:
Sub SMA3()
Range("D7").FormulaR1C1 = "=AVERAGE(R[-2]C[-1]:RC[-1])" 'This is a relative reference (left one cell and up two cells) - This give your three inputs
Range("D7").AutoFill Destination:=Range("D7:D" & Range("C1048576").End(xlUp).Row) 'Autofills the SMA
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.