簡體   English   中英

嘗試根據 ID 計算一系列數據的平均值、最小值和最大值

[英]Trying to calculate the average, min and max of a range of data depending their ID

我有 2 列。 一個帶有名稱,A 列,(COV,COSV,ETA ...),第二個帶有數字。 我在 A 列中有大約 40000 行和 30 個 dirrerent 名稱。我在另一張表中有 A 列中的所有不同名稱。

我想計算 A 列中每個名稱的平均結果、最小值和最大值。因此,例如每個 COV 的 B 列中所有數字的平均結果。

我能夠毫無問題地用 VBA 中的行計算平均結果。

WorksheetFunction.AverageIf

但是我沒有找到任何方法來為 B 列的最小值和最大值做同樣的事情。

編碼需要在 vba 中。

任何想法?

塞巴斯蒂安

這是部分代碼

sub delais

Worksheets("delais_moyen").Select

lastrow = Range("C4", Range("C4").End(xlDown)).Rows.Count + 3

Worksheets(message3).Select

lastline = Range("D7", Range("D7").End(xlDown)).Rows.Count + 6

columnlettermin = Split(Cells(1, lastcol).Address, "$")(1)
columnlettermoy = Split(Cells(1, lastcol + 1).Address, "$")(1)
columnlettermax = Split(Cells(1, lastcol + 2).Address, "$")(1)

Worksheets("delais_moyen").Select

For j = 4 To lastrow

    Set reponse = Sheets(message2).Range("D7:D" & lastline)

    Set delais = Sheets(message2).Range("P7:P" & lastline)

    reponsemin = columnlettermin & j

    reponsemoy = columnlettermoy & j

    reponsemax = columnlettermax & j


Range(columnlettermoy & j) = WorksheetFunction.AverageIf(reponse, Range("C" & j), delais)

 next j

end sub

First and foremost, avoid using .Select and even .Activate , .ActiveCell , .ActiveSheet , .ActiveWorkbook as discussed here How to avoid using Select in Excel VBA .

其次,考慮MINIFsMAXIFs的公式數組函數,如 VBA 中的注釋所示,然后轉換為最終值。 注意:下面的單元格引用可能需要調整,因為您似乎在使用不同的工作表:

With Worksheets(message3)
    lastline = .Range("D7", .Range("D7").End(xlDown)).Rows.Count + 6

    columnlettermin = Split(.Cells(1, lastcol).Address, "$")(1)
    columnlettermoy = Split(.Cells(1, lastcol + 1).Address, "$")(1)
    columnlettermax = Split(.Cells(1, lastcol + 2).Address, "$")(1)
End With

With Worksheets("delais_moyen")

    lastrow = .Range("C4", .Range("C4").End(xlDown)).Rows.Count + 3

    For j = 4 To lastrow
        ' CREATE AGGREGATE ARRAY FORMULAS
        .Range(columnlettermoy & j).FormulaArray = "=AVERAGE(IF(" & message2 & "!$P$2:$P$" & lastline & "=delais_moyen!C" & j & ", " & message2 & "!$D$2:$D$" & lastline & "))"
        .Range(columnlettermin & j).FormulaArray = "=MIN(IF(" & message2 & "!$P$2:$P$" & lastline & "=delais_moyen!C" & j & ", " & message2 & "!$D$2:$D$" & lastline & "))"
        .Range(columnlettermax & j).FormulaArray = "=MAX(IF(" & message2 & "!$P$2:$P$" & lastline & "=delais_moyen!C" & j & ", " & message2 & "!$D$2:$D$" & lastline & "))"

        ' CONVERT CELL FORMULAS TO VALUES
        .Range(columnlettermoy & j) = .Range(columnlettermoy & j).Value
        .Range(columnlettermin & j) = .Range(columnlettermin & j).Value
        .Range(columnlettermax & j) = .Range(columnlettermax & j).Value
    Next j

End With

暫無
暫無

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

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