簡體   English   中英

從多個工作表中獲取多個范圍的平均值

[英]Get Average of Multiple Ranges from Multiple Worksheets

我有一個工作簿,該工作簿具有一個訂單表單選項卡,該選項卡可將訂單作為訂單表單的副本生成到新的工作表中。 我需要平均那些工作表中的信息,以便找出典型的順序。

到目前為止,我只是想將所有值加在一起以顯示在趨勢數據工作表中而已提出以下內容:

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行上鍵入不匹配,我不太了解。

如果我將該行更改為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

可以嘗試在下面進行修改

通過將值讀入數組進行工作,然后對數組中的值進行平均

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

從邏輯上講,這可能實際上是低效的。 可能會出現一些煩人的問題,即為新物料添加更多行,然后將其添加到訂單中,但是現在可以正常工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM