具有不同范围的Excel中的平均值

时间:2016-08-01 11:48:07

标签: excel vba excel-vba average

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

我想平均不同长度的总和。示例数据集位于图像中,每周有不同商店的销售数字。如果不手动操作,我如何计算第5-7周的平均值?不同商店的销售期间将在矩阵中改变长度和位置。这可能与VBA /宏?

IMAGE HERE!

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

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

2 个答案:

答案 0 :(得分:0)

编辑:好的,我错过了平均应该由小组完成的点,而不是整个期间。所以下面的答案并不真正相关。

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

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

答案 1 :(得分:0)

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)感觉要评论,请继续,我欢迎这些变化。