excel - 逐行自动计算不同数值的平均值

标签 excel vba

我有一个 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/

相关文章:

c# - 如何创建一个组件,使 VBA 能够访问我自己正在运行的应用程序?

excel - 未找到 getElementById 时捕获错误

excel - 在 Python 中绘制 Excel 中的数据

database - Access +VBA : Correct creation of database

vba - 如何制作可调整大小的用户窗体?

sql - 无法使用 MS Access 前端删除记录

vba - 嵌套 If 语句有问题

vba - 删除行中的第二个破折号

excel - 可以在 Excel 中的条件范围内使用 QUARTILE 函数吗?

vba - 遍历命名范围列表