【问题标题】:Average in excel with different ranges不同范围的excel中的平均值
【发布时间】:2016-08-01 11:48:06
【问题描述】:

很抱歉,如果以前有人问过这个问题,但我在这里或其他地方找不到很好的答案。

我想平均不同长度的总和。示例数据集在图像中,其中包含每周不同商店的销售数字。如果不手动计算,我将如何计算第 5-7 周的平均值?不同商店的销售期将在矩阵中的长度和位置上发生变化。 VBA/宏可以做到这一点吗?

IMAGE HERE!

对于商店#1,我希望宏给我两个不同的平均值;一份用于第 2-3 周的销售,一份用于第 5-7 周的销售。

我目前正在处理的数据集是 400x50,长度各不相同。提前致谢!

【问题讨论】:

  • 你的意思是商店 1 的 2-3 和 5-7?
  • 是的,对不起。店铺#1 第 2-3 周和第 5-7 周
  • 商店 2 的类似 1-2,4 和 6-7?
  • 是的,请。如果您可以帮助使用具有动态范围或某种形式的公式,我想我将能够弄清楚自动填充。
  • 您希望如何呈现输出?尽管您的问题显示了原始数据,但它没有显示任何解决方案的尝试,也没有显示您希望如何呈现结果。请阅读How do I Ask a Good QuestionHow to create a Minimal, Complete, and Verifiable example 的帮助主题

标签: vba excel average


【解决方案1】:

编辑:好的,我错过了应该按组而不是整个期间进行平均的点。所以下面的答案并不相关。

你可以SUMIF所有非空白单元格,然后除以所有非空白单元格的COUNTIF

=SUMIF(B2:H2;"<>"&"")/COUNTIF(B2:H2;"<>"&"")

【讨论】:

  • 感谢您的回答,但这仅返回两种不同销售额的平均值。我想知道的是第 2-3 周的平均值和 5-7 周的平均值。手动这当然是 5,5 和 4,但我想自动填充它而不必手动选择周。这是因为可能在第 5-7 周进行了促销,这与第 2-3 周不同。
【解决方案2】:
Public Function MULTIAVERAGE(rng As Range) As String
Dim r As Long, c As Long
Dim rngelement As Range, avgarray(), i As Long

Set rng = Intersect(rng, rng.Worksheet.UsedRange)
For r = 1 To rng.Rows.Count
    For c = 1 To rng.Columns.Count
        If Not IsEmpty(rng(r, c)) Then
                If rngelement Is Nothing Then
                    Set rngelement = rng(r, c)
                Else
                    Set rngelement = Union(rng(r, c), rngelement)
                End If
            Else
                If Not rngelement Is Nothing Then
                    ReDim Preserve avgarray(i)
                    avgarray(i) = Application.WorksheetFunction.Average(rngelement)
                    Set rngelement = Nothing
                    i = i + 1
                End If
        End If
    Next c
Next r

If Not rngelement Is Nothing Then
    ReDim Preserve avgarray(i)
    avgarray(i) = Application.WorksheetFunction.Average(rngelement)
'    Set rngelement = Nothing
'    i = i + 1
End If

'Dim avgarraystr() As String
'    ReDim avgarray(i)
'For j = 0 To i
'    avgarraystr(j) = CStr(avgarray(j))
'Next j
MULTIAVERAGE = Join(avgarray, " | ")
End Function

分别给出5.5 | 43 | 5 | 4.5 的结果。 我不会评论它;即使总体思路很好,OP 缺乏规范和代码也不能保证提供帮助的理由。他可以通过努力理解它来弥补。

如果有人(包括但不限于 OP)想要评论它,请继续,我欢迎这样的变化。

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2015-06-04
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多