2016-11-30 377 views
0

我需要計算VBA中不同數字的平均值,但它已變得複雜,我不確定接下來要做什麼。在VBA中計算平均值

我轉向谷歌尋找潛在的解決方案,但我沒有發現任何相關的問題。

這裏是我的表:

Table example

每個ID:

  • ...是一個非唯一編號。
  • ...有一個關聯的值。

每個ID的平均值需要在VBA中計算。

  • 與 'ID1' 的ID的值是2,3和4,因此具有3個
  • 的值的平均值與 'ID2' 的ID均爲4,所以有4
  • 平均...

我現在要麼一整列計算平均值或簡單重複的值。

我將非常感謝您的幫助和建議。

+0

嗨。你有沒有考慮使用數據透視表來做到這一點?當您在值列中拖動時,只需將值字段設置更改爲'平均值'... – 2016-11-30 13:02:31

+0

@ wilson88謝謝。我會盡量使用它。但根據我的任務,我需要在VBA中做到這一點。我有幾個我在VBA中做過的計算,這個也應該是其中的一部分。 –

+0

嗨,您可以編寫VBA創建數據透視表,如@ wilson88所示,並添加使用VBA的vlookup公式,該公式將數據透視表中的平均值拉到您希望的列。 –

回答

0

不夠公平。如果你有你的心臟上的VBA的解決方案設置這一項應該做的伎倆(你的例子)......

Sub Av() 

Dim LastRow As Long 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

For i = 2 To LastRow 

    Cells(i, 3).Value = Application.WorksheetFunction.SumIf(Range("A2:A" & LastRow), Range("A" & i), Range("B2:B" & LastRow))/_ 
Application.WorksheetFunction.CountIf(Range("A2:A" & LastRow), Range("A" & i)) 

Next 

End Sub 

該解決方案將在您發佈的例子保存您的錶行(非由ID是唯一的)

+0

太棒了。非常感謝你。它工作完美。現在我可以結束我的計算:) –

0

如果你不想使用數據透視表作爲wilson88建議你可以嘗試以下方法,

創建從沒有重複的ID在它的數據集的列表。

在此列表旁邊的列中,您可以執行sumif公式以從您的每個ID的數據集中獲得總和。

然後在此旁邊的列中,您可以使用countif公式來計算用戶ID出現的次數。然後你可以通過countif列來劃分sumif列來獲得平均值。

一旦你得到的這個想法,你可以將公式合併爲一個單元格爲以下

= SUMIF(「ID範圍」,「ID」,「總和範圍」)/ COUNTIF(「ID_RANGE」 「ID」)

這將是生成數據透視表的手動方式,您可以使用vba來生成公式。

Sheet1.range(「A1:A100」)。值=「= enterformulahere」

0

你也可以使用數組公式找到的唯一ID的

進出口使用的ID在A1:A10和我的價值觀在B1:B10

使用此數組中的D1: D10

=INDEX($A$2:$A$10,MATCH(0,COUNTIF($D$1:D1,$A$2:$A$10),0))

給我的唯一的ID,然後按上述簡單SUMIF/COUNTIF

=SUMIF($A$1:$A$10,$D1,$B$1:$B$10)/COUNTIF($A$1:$A$10,$D1)

enter image description here

希望這有助於