![](/img/trans.png)
[英]How can I calculate the average, min, max, range for a cell from a dropdown and it changes in Excel
[英]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 .
其次,考慮MINIFs
和MAXIFs
的公式數組函數,如 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.