很抱歉,如果之前有人问过,但我在这里或其他地方找不到合适的答案。
我想平均不同长度的总和。示例数据集位于图像中,每周有不同商店的销售数字。如果不手动操作,我如何计算第5-7周的平均值?不同商店的销售期间将在矩阵中改变长度和位置。这可能与VBA /宏?
对于商店#1,我希望宏给我两个不同的平均值;第2-3周销售一个,5-7周销售一个。
我目前正在处理的数据集是400x50,所有数据集都有不同的长度。提前致谢!
答案 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 | 4
和3 | 5 | 4.5
。 我不会发表评论;尽管总体思路很好,OP缺乏规范和代码但没有理由提供帮助。他可以通过努力理解它来弥补。
如果有人(包括但不限于OP)感觉要评论,请继续,我欢迎这些变化。