2016-08-01 38 views
-2

对不起,如果这之前已被问过,但我无法在这里或其他地方找到一个好的答案。excel的平均值与不同的范围

我想平均不同长度的总和。示例数据集位于图片中,每周有不同商店的销售编号。如果没有手动执行,我将如何计算第5-7周的平均值?在不同商店销售的时间段在矩阵中的长度和位置都会改变。这可能与VBA /宏?

IMAGE HERE!

对于车间#1我想宏观上给我两个不同的平均值;一周用于2-3周销售,另一周用于5-7周。

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

+0

你的意思是商店1的2-3和5-7? –

+0

是的,对不起。 2-3周和5-7商店#1 – Maskar

+0

类似商店2的1-2,4和6-7? –

回答

0

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

你可以SUMIF所有非空白单元格,然后由所有非空白单元格的COUNTIF划分:

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

谢谢你的回答,但这只会返回两种不同类型销售的平均值。 我想知道的是2-3周的平均值和5-7的平均值。手动这当然是5,5和4,但我想自动填充,而不必手动选择周。 这是因为在第5-7周可能有销售,这使得它与第2-3周不同。 – Maskar

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)感觉像评论它,继续前进,我很欢迎这样的变化。

相关问题