我有一个表,其中在一列中我有分配给特殊硬件模型的值。该表如下所示:
我们需要找到该表中每个模型的平均三个最高数字,例如:
我们有一个模型22PFx4109
,我们需要从分配给它的值中获得平均三个最高数字。因此对于22PFx4109
,它将是average(278,279,289)
。然后我们需要为每个其他模型做这件事。结果必须显示在每个模型值列表的末尾,因此它将显示在289
值的右侧。
我没能写出能够做到这一点的功能。你能用VBA帮助我吗?或者也许仅使用一个函数可以做到这一点?
答案 0 :(得分:1)
对于公式解决方案,如果包含"OUTPUT"
的单元格为C3
,则应将以下公式放入D4
并向下粘贴。
=IF(C4="","",IF(C5<>"","",IF(C3="",C4,AVERAGE(C2:C4))))
只有当您的前3个值位于每个组(模型)的底部时,这才有效。
答案 1 :(得分:0)
试试这个公式:
AVERAGE(OFFSET(E1,COUNTA(E:E)-3,0,3,1))
在我的例子中,在E1中我有列的标题,并且在该列的最后一个值之后没有值(使用counta)
答案 2 :(得分:0)
看到您的数据透视表我创建了一个非常相似的数据库。
以下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 :(得分:-1)
您还可以尝试以下公式:
=AVERAGE(LARGE(C:C,1),LARGE(C:C,2),LARGE(C:C,3))