试图根据ID计算一系列数据的平均值、最小值和最大值



我有两列。一个带有名称,列A,(COV,COSV,ETA…(,第二个带有编号。我有大约40000行,A列有30个目录名称。我在另一张表中有A列所有不同的名称。

我想计算A列中每个名称的平均结果、最小值和最大值。例如,B列中每个COV的所有数字的平均结果。

我能够用VBA中的行计算出平均结果,没有任何问题。

工作表功能。平均值

但我找不到任何方法来为B列的最小值和最大值做同样的事情。

编码需要使用vba。

知道吗?

Sebastien

这是代码的一部分

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

首先,避免使用.Select,甚至避免使用此处讨论的.Activate.ActiveCell.ActiveSheet.ActiveWorkbook如何避免在Excel VBA中使用Select。

其次,将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

相关内容

最新更新