自动计算不同数字值的平均值

我有一个Excel文件,其中有多个列和许多行。 一列,说A有ID号码。 另一列,说G有价格。 A列有重复的ID号码,但不是所有的号码重复相同的次数。 有时只是一次,其他时间2,3或几次。 该行的每一列G都具有唯一的价格。

基本上,我需要平均A列给定的ID的价格。如果每个ID重复相同的次数,这将是非常简单的,但因为他们不是我必须手动做每个分组的平均计算。 由于我的电子表格有许多行,这是永恒的。

这里是一个例子(H列是我目前手动计算的平均值):

A ... GH 1 1234 3.00 3.50 2 1234 4.00 3 3456 2.25 3.98 4 3456 4.54 5 3456 5.15 11 8890 0.70 0.95 13 8890 1.20 ... 

所以在上面的例子中,ID#1234的平均价格是3.50。 同样,ID#3456的平均价格为3.98,#8890的平均价格为0.95。

  • 注意第5行和第11行之间的行如何丢失,第12行也丢失了? 那是因为他们被其他原因过滤掉了。 我需要从我的计算中排除这些隐藏的行,只计算可见行的平均值。

我试图写一个VBA脚本,将自动计算出来,然后打印H列中的每个ID的平均值。

这里是我考虑的一些代码:

 Sub calcAvg() Dim rng As Range Set rng = Range("sheet1!A1:A200003") For Each Val In rng Count = 0 V = Val.Value '''V is set equal to the value within the range If Val.Value = V Then Sum = Sum + G.Value V = rng.Offset(1, 0) '''go to next row Count = Count + 1 Else '''V = Val.Value '''set value in this cell equal to the value in the next cell down. avg = Sum / Count H = avg '''Column G gets the avg value. End If Next Val End Sub 

我知道上面的代码有一些问题。 我不太熟悉VBA。 此外,这将打印平均每次在同一行。 我不知道如何迭代整个行。

这似乎过于复杂。 理论上它是一个简单的问题,但是ID#重复的缺失行和不同数量使得它更加复杂。

如果这可以在Excel函数中完成,那会更好。

任何想法或build议将不胜感激。 谢谢。

如果你可以添加另一行到你的数据的顶部(把列标题在其中)其公式非常简单。

C2公式是

 =IF(A2<>A1,AVERAGEIFS(B:B,A:A,A2),"") 

为所有数据行复制这个。

这适用于Excel 2007或更高版本。 如果使用Excel 2003或更早版本,请使用AVERAGEIF ,相应地调整范围

如果您不能添加标题行,请将第一个公式(单元格C1 )更改为

 =AVERAGEIFS(B:B,A:A,A1) 

以我的方式 ..

 Sub calcAvg() Dim x, y, i, y2, t, Count, Mount As Integer Dim Seek0 As String x = 1 '--> means Col A y = 1 '--> means start - Row 1 y2 = 7 '--> means end - Row 19 For i = y To y2 If i = y Then Seek0 = Cells(i, x) t = i Count = Cells(i, x + 6) Mount = 1 Else If Cells(i, x) <> Seek0 Then Cells(t, x + 7) = Count / Mount Count = Cells(i, x + 6) Mount = 1 t = i Seek0 = Cells(i, x) Else Count = Count + Cells(i, x + 6) Mount = Mount + 1 End If End If Next End Sub 

希望这可以帮助 ..