特定数据透视字段中前 3 个值的平均值

Average of top 3 values within a specific pivot field

我有一个 table,其中一列中有分配给特殊硬件型号的值。 table 看起来像这样:

我们需要找到每个模型中三个最高数字的平均值 table,例如:

我们有一个模型 22PFx4109,我们需要从分配给它的值中获取三个最高数字的平均值。所以对于 22PFx4109 它将是 average(278,279,289)。然后我们需要为每个其他模型做它。结果必须显示在每个模型值列表的末尾,因此这里它将显示在 289 值的右侧。

我未能编写能够做到这一点的函数。你能用 VBA 帮我解决这个问题吗?或者也许只用一个函数就可以做到?

试试这个公式:

AVERAGE(OFFSET(E1,COUNTA(E:E)-3,0,3,1))

在我的示例中,在 E1 中,我的列有 header,并且在该列的最后一个值之后没有值(使用计数)

您也可以试试下面的公式:

=AVERAGE(LARGE(C:C,1),LARGE(C:C,2),LARGE(C:C,3))

看到你的支点table我创建了一个非常相似的。

以下sub适合我,我相信它也适合你:)

Sub Average_Top3()

    Const top As Byte = 3
    Dim pi As PivotItem
    Dim pi2 As PivotItem
    Dim i As Byte
    Dim vSUM As Variant
    Dim dAVG As Double
    Dim rng As Range

    With ActiveSheet.PivotTables(1)
        For Each pi In .PivotFields("WORK_DATE").PivotItems
            For Each pi2 In .PivotFields("ID_MODELU").PivotItems
                Set rng = Intersect(pi.DataRange, pi2.DataRange)
                If Not rng Is Nothing Then
                    dAVG = 0
                    vSUM = 0
                    For i = 1 To top
                        vSUM = vSUM + Application.WorksheetFunction.Large(rng, i)
                    Next
                    dAVG = Round(vSUM / top, 2)
                    rng.Cells(rng.Rows.Count).Offset(0, 1).Value2 = dAVG
                    Set rng = Nothing
                End If
            Next
        Next
    End With

End Sub

即使您的前 3 个值不在每个组(模型)的底部,此子项仍然有效。

关于公式解,如果"OUTPUT"的单元格是C3,下面的公式要放在D4里,往下粘贴。

=IF(C4="","",IF(C5<>"","",IF(C3="",C4,AVERAGE(C2:C4))))

这仅在您的前 3 个值位于每个组(模型)的底部时才有效。