我是编程新手,但是我的工作任务有时会迫使我在Excel中自动执行某些过程。无论如何,我想计算给定条件下列内n个连续最小值的平均值。我设法找到了来自用户"加里的学生"从2015年7月开始,除了我必须将Sums更改为平均值之外,这几乎完全符合我的需要,但是,由于我的编程技能接近于0,我尝试但是没有成功计算给定条件的那些值。例如(参见以下链接中的图片。Excel columns example)在第2列中,3个连续最小值的平均值为44,但是我想添加一个条件,例如,计算平均值如果第一列中的值/文本是" B"则连续3个最小值。答案显然应该是250.
以下是最初的VBA代码:
Public Function consec(rng As Range, x As Long) As Double
Dim r As Range, i As Long, mymin As Double, temp As Double
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
i = 1
Set r = rng(i).Resize(x, 1)
mymin = wf.Average(r)
For i = 2 To rng.Count - x + 1
Set r = rng(i).Resize(x, 1)
temp = wf.Average(r)
If temp < mymin Then
mymin = temp
End If
Next i
consec = mymin
End Function
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
要绕过vba,以下数组公式将达到您想要的效果:
=AVERAGE(SMALL(IF($A$2:$A$12=$E$1,$B$2:$B$12),ROW(INDIRECT("1:" & E2))))
作为数组公式,必须在退出编辑模式时使用 Ctrl - Shift - Enter 进行确认。如果正确完成,则会将{}
放在公式周围。
ROW(INDIRECT("1:" & E2))
部分决定了平均最低金额的数量。它从1
或最低值迭代到E2中的任何值,在本例中为3
或第三个。
IF()声明; IF($A$2:$A$12=$E$1,$B$2:$B$12)
汇总了符合条件的值数组,在这种情况下,列A等于E1或&#39; B&#39;。
SMALL()函数使用IF()中的数组和第一个中的Iteration来获取数组中的最小值,并将这些值返回给AVERAGE()函数。