2015-05-22 33 views
0

我有一張表格,其中一列中的值是分配給硬件的特殊型號的。該表是這樣的:特定數據透視表字段中前3個數值的平均值

Screenshot

我們需要找到三個最高數字的平均值在該表中每個模型,例如:

我們有一個模型22PFx4109,我們需要從分配給它的值中平均得到三個最高的數字。因此對於22PFx4109它將是average(278,279,289)。那麼我們需要爲每個其他模型做到這一點。結果必須顯示在每個模型值列表的末尾,因此這裏將顯示在289值的右側。

我沒有寫出能夠做到這一點的函數。你可以用VBA來幫助我嗎?或者也許有可能只用一個函數來完成它?

+1

'VB' <>'VBA' ... –

回答

1

至於配方解決方案,如果包含"OUTPUT"的單元格爲C3,則應在D4中插入以下公式並向下粘貼。

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

此,如果你的前3位值在每一個組(模型)的底部纔會工作。

+0

非常感謝!我今天會測試這個,並留下回復:)。 –

+0

它的工作原理,非常感謝你@ZygD :)。 –

0

試試這個公式:

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

在我的例子,在E1我對列和標題該列的最後一個值之後沒有值(使用COUNTA)

+0

看來這個公式找到了3個最底部值的平均值。然而,OP需要每個「模型」的平均值,而不僅僅是底部的3個值。 – ZygD

-1

你可以也嘗試下面的公式:

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

該解決方案只能爲整列產生一個平均值,而OP則希望爲不同的組分配平均值。 – ZygD

+0

@ZygD是對的,我需要單獨的平均值,謝謝澄清。 –

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位值沒有在每個組(模型)的底部,此子依然會工作。

相關問題