【问题标题】:How to get the average from multipe columns in VBA如何从 VBA 中的多个列中获取平均值
【发布时间】:2018-04-02 06:06:57
【问题描述】:

我有一个表格,第一行作为标题,第一列有学生姓名,其余单元格有不同的学生分数。

我必须在 O 列上创建一个新标题,显示平均分数。完成后,我必须计算从 B 列到 N 列的所有值,然后打印出 O 列每一行的平均值。

Sub CalculateAverage()
Dim rng As Range
Dim totalsum As Double
Dim totalnum As Double
Dim answer As Double
    totalsum = 0
    totalnum = 0

Set rng = Cells(1, 1).CurrentRegion

    For Each Sheet In Application.Worksheets
    Sheet.Cells(1, 15) = "Average Score"
    ActiveSheet.Cells.HorizontalAlignment = xlLeft
    Next

    For Each Sheet In Worksheets("Sheet1").Range("B2:N502").Cells
        totalsum = totalsum + Sheet.Value
        totalnum = totalnum + 1
    Next

    answer = totalsum / totalnum
    Average = answer
    Range("O2").Select
    ActiveCell.FormulaR1C1 = Average()
End Sub

我在倒数第二行遇到调试错误。谁能帮我解决这个问题。谢谢

【问题讨论】:

  • 感谢您告诉我。我只是在第二个 For 语句之后添加了一个结尾。该代码不再显示任何错误,但它也没有做任何事情......我做错了什么?
  • 将“For Each Sheet”更改为“For Each rng”并删除括号:ActiveCell.FormulaR1C1 = Average
  • 你为什么不使用工作表公式呢? =AVERAGE(B2:N502) 或者如果出于某种原因它必须在 VBA 中:Application.WorksheetFunction.Average(B2:N502) 我错过了什么吗?
  • @DisplayName 只是这样做了,它向我显示了每个语句的第一个调试错误 13 不匹配
  • @ashleedawg 我需要这样做,这样即使我添加更多行,宏也会运行并在 O 列中进行平均

标签: excel vba


【解决方案1】:
Sub Macro1()

    Dim rng As Range

    Set rng = Range("A1").CurrentRegion
    With Range("O2")
        .Formula = "=AVERAGE(RC[-13]:RC[-1])"
        .AutoFill Destination:=Range("O2:O" & rng.Rows.Count)
    End With

End Sub

【讨论】:

  • 哇,效果很好,你能解释一下 AVERAGE(RC[-13]:RC[-1]) 到底在做什么吗?
  • 它被称为 R1C1 表示法,它是 Excel 原生计算出您想要引用的行和列的方式。 C 的 [-13] 表示“向左走 13 列”。缺少任何此类方括号表示“只需使用当前行”。我可以很容易地使用Formula = "=AVERAGE(B2:N2)",但我只是录制了一个宏并录制了生成的代码,R1C1 表示法是 Excel 在幕后使用的。
  • 如果这能令人满意地解决您的问题,请点击“接受”选项。
【解决方案2】:

如果我这样做,我会取消透视数据,从中制作数据透视表,然后使用数据透视表。如果我安装了插件(并且它已嵌入 Excel 2016),我会使用 PowerQuery 来执行此操作。否则,我会在convert cross table to list to make pivot table 的回答中使用其中一种方法,然后我只需启动宏记录器,进行数据透视,然后查看并修改生成的代码。

【讨论】:

  • 您好,感谢您的输入,但我只能使用 VBA 来完成此操作,无法录制任何宏。谢谢
猜你喜欢
  • 2018-12-30
  • 1970-01-01
  • 2020-08-12
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多