从多个工作表中获取多个范围的平均值

我有一个工作簿,其中有一个订单表单选项卡,将订单作为订单表单的副本生成新的工作表。 我需要从这些工作表的信息平均,以便我可以找出典型的顺序。

这是我到目前为止只是试图将所有的值一起添加到趋势数据工作表中显示:

Sub CalculateAvg() Dim WS_Count As Integer Dim I As Integer Dim wsTrend As Worksheet, wsTemp As Worksheet Set wsTrend = ThisWorkbook.Sheets("Trend Data") WS_Count = ActiveWorkbook.Worksheets.Count For I = 1 To WS_Count If ActiveWorkbook.Worksheets(I).Name = "Order Form" Then Exit For 'exit loop if order form reached Set wsTemp = ActiveWorkbook.Worksheets(I) wsTrend.Range("D4:D53").Value = wsTrend.Range("D4:D53").Value + wsTemp.Range("F4:F53").Value Next I End Sub 

我得到一个错误13 – types不匹配range1 = range1 + range2线,我不太明白。

如果我将该行更改为wsTrend.Range("D4:D53").Value = wsTemp.Range("F4:F53").Value

我没有得到types不匹配,它的工作原理。

我可能会用错误的方式来解决这个问题,或者错过一些简单的事情,但是我不确定要采取什么方向。

任何帮助,将不胜感激。 谢谢。

编辑,澄清一点:基本上,我可以有100个工作表,看起来像这样但不同的数字:

 apples 2 bananas 5 oranges 3 mangoes 10 

我需要遍历所有的工作表,并获得每个项目和显示的平均值

 avg apples 3 avg bananas 4 avg oranges 4 avg mangoes 8 

可以尝试下面的修改

通过将值读入数组,然后对数组中的值执行平均值

 Sub avg_test() Dim Val1(), Val2(), Val3() Val1 = Sheets("Sheet1").Range("A1:A10").Value Val2 = Sheets("Sheet2").Range("A1:A10").Value Val3 = Sheets("Sheet3").Range("A1:A10").Value avg = Application.WorksheetFunction.Average(Val1, Val2, Val3) End Sub 

好吧,所以“Eh”培根分级让我以不同的方式思考问题。

这是我得到的:

 Sub CalculateAvg() Dim WS_Count As Integer Dim I As Integer Dim App_WS_Count As Integer App_WS_Count = 0 Dim wsTrend As Worksheet Dim wsTemp As Worksheet Set wsTrend = ThisWorkbook.Sheets("Trend Data") Dim TrendRange As Range Set TrendRange = wsTrend.Range("D4:D53") For A = 1 To TrendRange.Rows.Count TrendRange.Cells(A, 1).Clear Next A ' Set WS_Count equal to the number of worksheets in the active workbook. WS_Count = ActiveWorkbook.Worksheets.Count For I = 1 To WS_Count If ActiveWorkbook.Worksheets(I).Name = "Order Form" Then Exit For 'exit loop if order form reached App_WS_Count = App_WS_Count + 1 Set wsTemp = ActiveWorkbook.Worksheets(I) Dim TempRange As Range Set TempRange = wsTemp.Range("F4:F53") For C = 1 To TempRange.Rows.Count TrendRange.Cells(C, 1).Value = TrendRange.Cells(C, 1).Value + TempRange.Cells(C, 1).Value Next C Next I For A = 1 To TrendRange.Rows.Count TrendRange.Cells(A, 1).Value = TrendRange.Cells(A, 1).Value / App_WS_Count Next A End Sub 

这在逻辑上可能是非常低效的。 而且可能会出现恼人的问题,为添加到订单表单中的新项目添加更多行,但现在正在工作。