我有一个 Excel 文件,其中有几列和许多行。假设 A 的一列有 ID 号。另一栏,说G有价格。 A 列具有重复的 ID 编号,但并非所有编号重复的次数都相同。有时只进行一次,有时则进行 2、3 次或数次。该行的每一列 G 都有一个唯一的价格。
基本上,我需要对 A 列中给定 ID 的价格进行平均。如果每个 ID 重复相同的次数,这将非常简单,但因为它们不是,所以我必须手动进行平均计算每个分组。由于我的电子表格有很多行,这需要很长时间。
这是一个示例(H 列是我当前手动计算的平均值):
A ... G H
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 函数中完成,那就更好了。
如有任何想法或建议,我们将不胜感激。谢谢。
最佳答案
如果您可以在数据顶部添加另一行(将列标题放入其中),那么使用公式就非常简单。
C2
的公式为
=IF(A2<>A1,AVERAGEIFS(B:B,A:A,A2),"")
将其复制到所有数据行。
这适用于 Excel 2007 或更高版本。如果使用 Excel 2003 或更早版本,请改用 AVERAGEIF
,并相应调整范围
如果无法添加标题行,请将第一个公式(单元格 C1
)更改为
=AVERAGEIFS(B:B,A:A,A1)
关于excel - 逐行自动计算不同数值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207351/