2016-11-30 382 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

希望这有助于