【问题标题】:Excel VBA Average of each cell on each worksheetExcel VBA 每个工作表上每个单元格的平均值
【发布时间】:2018-08-20 23:40:46
【问题描述】:

我有一个包含多个工作表的工作簿,并且工作表的布局完全相同。例如 C5 可能是周期时间,我想知道所有工作表的平均周期时间。唯一的问题是我有很多数据,我有从第 5 行到第 125004 行的数据,以及从 A 到 J 列的数据。我不确定如何将数据平均到最后仍然有 125004 行和列的一张纸上A 到 J,仅显示所有工作表的平均值。

【问题讨论】:

  • 你不清楚你想从哪里得到这个平均值 - 是每张纸上的单元格 C5,还是每张纸上的这个大范围?
  • 单元格 C5 在每张纸上都有循环时间数据,我想要平均循环时间,因此是整个工作簿中 C5 的平均值。但是,我想要平均的不仅仅是 C5,它的 C5、C6 和 C7 一直到 C125004,这只是 C 列,我想对 A 到 J 列进行平均

标签: vba excel


【解决方案1】:

3D formula 似乎就足够了,例如:

=AVERAGE(Sheet1:Sheet3!C5)

复制过来以适应。

【讨论】:

  • 当床单真正标准化时,这肯定是最好的答案。
  • 这很好用,但是,我有 1,250,000 个单元格要填充数据,复制和粘贴会花费很长时间
【解决方案2】:

在 VBA 中创建一个模块并编写以下内容

Public Function GetAllSheetsAverage(makeUpdate As Boolean) As Double
If makeUpdate Then
    Application.Volatile
End If
Dim rng As Range
Dim sht As Worksheet
Set rng = Application.Caller
Dim sum As Double
sum = 0
Dim count As Integer
count = 0
For Each sht In ThisWorkbook.Worksheets
    If sht.Name = rng.Worksheet.Name Then GoTo SkipOwnSheet

    Dim rng2 As Range
    Set rng2 = sht.Range(rng.Address)

    sum = sum + rng2.Value

    count = count + 1

SkipOwnSheet:


Next sht

GetAllSheetsAverage = sum / count

结束函数

在单元格上使用函数=GetAllSheetsAverage(TRUE())。 TRUE 将使函数监听工作表中的每一个变化,因此在如此大量的数据上它可能会很慢。 您可以更改为 false,但只要其他工作表中的值发生更改,您就必须手动更新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多