【问题标题】:Moving Average of lowest 3 of last 4 values最后 4 个值中最低 3 个的移动平均线
【发布时间】:2014-04-10 06:59:48
【问题描述】:

我修改了在此处找到的解决方案 Calculate Moving Average in Excel,但我正在努力更进一步并找到最后 4 个值中最低 (SMALL) 3 个值的平均值。

我在其中的等式现在可以找到最后四个值(在我的例子中是高尔夫得分),并且可以通过除以 4 来创建平均值,但我希望它取三个最低值的平均值最后四个非空白单元格(最后四个表示较大的列号)。

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    我用过这个版本

    =AVERAGE(SMALL(INDEX(F5:AH5,LARGE(IF(ISNUMBER(F5:AH5),COLUMN(F5:AH5)-COLUMN(F5)+1),4)):AH5,{1,2,3}))

    CTRL+SHIFT+ENTER

    确认

    INDEX 函数找到包含最后 4 个值的范围,然后SMALL 给出最小的 3,AVERAGE 取平均值。

    使用ISNUMBER 而不是ISBLANK 意味着如果非数字单元格是真正的空白、公式空白......甚至是文本,则公式有效。

    鉴于您似乎在F4:AH4 范围内依次有整数 1 到 n,如果您愿意,可以使用这些数字进一步简化,即不需要“数组条目”的版本

    =AVERAGE(SMALL(INDEX(F5:AH5,LARGE(INDEX(ISNUMBER(F5:AH5)*F$4:AH$4,0),4)):AH5,{1,2,3}))

    如果有 3 个或更少的值,你想要什么结果?第一个版本将返回 #NUM!在这种情况下出错,第二个也将返回 #NUM!除非恰好有 3 个值,在这种情况下,您会得到所有 3 个值的平均值

    【讨论】:

    • 关于小于 3 个值的问题 Barry。我进行了修改以解决此问题。感谢你的回答。我使用了tigeravatar的公式。我修改为 '{=IF(COUNT($F5:AH5)
    【解决方案2】:

    稍微简化的版本 - 试试这个数组公式。请务必使用 CtrlShiftEnter 确认:

    =SUM(SMALL(INDEX($F5:AH5,MATCH(TRUE,COLUMN($F5:AH5)=LARGE(NOT(ISBLANK($F5:AH5))*COLUMN($F5:AH5),4),0)):AH5,{1,2,3}))/3
    

    【讨论】:

    • 仍在尝试理解它,但它看起来很棒,并且符合我的公式的结果。爱简化!
    【解决方案3】:

    这仅适用于您想要n 中最低的n-1 数字

    =(sum(FourValuesRange) - max(FourValuesRange))/(count(FourValuesRange)-1)
    

    【讨论】:

      【解决方案4】:

      考虑以下UDF

      Public Function MovAverage(rIn As Range) As Double
          Dim wf As WorksheetFunction, M As Long
          Dim zum As Double
          Dim it(1 To 4)
          Set wf = Application.WorksheetFunction
          N = rIn.Row
          M = rIn.Columns.Count + rIn.Column - 1
          j = 1
          zum = 0
          For i = M To 1 Step -1
              v = Cells(N, i).Value
              If v <> 0 And v <> "" Then
                  it(j) = v
                  zum = zum + v
                  j = j + 1
                  If j = 5 Then GoTo NextPart
              End If
          Next i
      
      NextPart:
      
          MovAverage = (zum - wf.Max(it(1), it(2), it(3), it(4))) / 3
      
      End Function
      

      在工作表单元格中

      =MovAverage(F5:AH5)

      将获取列 FAH 之间的第 5 行中的最后四个值(不包括空白和零),并返回这些值中最小的三个的平均值。

      【讨论】:

      • UDF 通常比接受答案中的极其复杂的单线阵列函数更直观。 - 海事组织
      • @Stepan1010 我同意你的看法............但是有些人有宏观恐惧症,更喜欢在工作表中独家使用方程式。
      • 两年后回来理解/更改它们要容易 10 倍 - 我发现了。
      【解决方案5】:

      使用公式得出详细的答案,但是如果你像你一样取四个的总和,然后减去四个的最大值,然后将该结果除以三得到平均值。

      编辑 以下数组公式对我有用:(ControlShiftEnter 输入公式)

      =(SUM(($F5:AH5)*(COLUMN($F5:AH5)>LARGE((COLUMN($F5:AH5))*(NOT(ISBLANK($F5:AH5))),4+1)))-MAX(($F5:AH5)*(COLUMN($F5:AH5)>LARGE((COLUMN($F5:AH5))*(NOT(ISBLANK($F5:AH5))),4+1))))/3
      

      我认为可以简化,但我没有解决

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 2021-07-17
        相关资源
        最近更新 更多