我有两列。一个带有名称,列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。
其次,将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