计算给定条件的列中n个连续最小值的平均值

时间:2016-05-20 14:07:51

标签: excel-vba vba excel

我是编程新手,但是我的工作任务有时会迫使我在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

非常感谢任何帮助。

感谢。

1 个答案:

答案 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()函数。

enter image description here