我有一个工作簿,其中包含一个订单表单,可以将订单生成订单作为新工作表的副本。我需要平均这些工作表中的信息,以便找出典型的顺序。
到目前为止,这是我想到的,只是尝试将所有值一起添加到趋势数据工作表中显示:
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 - 在range1 = range1 + range2行上输入不匹配,我不太明白。
如果我将该行更改为just
wsTrend.Range("D4:D53").Value = wsTemp.Range("F4:F53").Value
我没有出现类型不匹配的问题,而且有效。
我可能以错误的方式解决这个问题或者遗漏了一些简单的事情,但我不确定应该采取什么方向。
任何帮助将不胜感激。 谢谢。
编辑,稍微澄清一下: 基本上,我可以有100个看起来像这样但有不同数字的工作表:apples 2
bananas 5
oranges 3
mangoes 10
我需要遍历所有工作表并获得每个项目的平均值并显示
avg apples 3
avg bananas 4
avg oranges 4
avg mangoes 8
答案 0 :(得分:0)
可以尝试修改下面的
通过将值读入数组,然后对数组中的值执行平均值
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
答案 1 :(得分:0)
好的,所以Grade'Eh'Bacon让我以不同的方式思考问题。
这就是我所拥有的:
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
逻辑上这可能效率很低。并且可能会出现令人烦恼的问题,为新订单添加更多行,这些新订单会在未来的订单中添加,但现在正在运行。