[英]Error with array formula in VBA
A B C D
east 1 56
west 5 98
east 1 78
west 5 99
south 3 23
east 2 45
south 3 67
我想获得串联的A + B相同组合的最大值。 例如,对于east1,我应该在D列中得到78。为此,我使用的是VBA,但是代码似乎不起作用。 我正在使用数组公式。
我的代码是:
.Range("D2:D" & OutputLastRow).FormulaArray = "=MAX(("$A$2:$A$" & OutputLastRow=A2)*("$B$2:$B$" & OutputLastRow=B2)*("$C$2:$C$" & OutputLastRow))"
代码正在运行,没有任何错误,但是结果出了问题,因为随着公式从D2向下移动,单元格A2和B2都没有更新。 A2保持为A2,B2保持为B2。 我已经尝试过使用循环,但这也行不通。
在多单元格区域上使用.FormulaArray
时,这不像将数组公式放在第一个单元格中并自动填充。 您应该分两步明确地执行此操作。 经过更正后,您的代码应如下所示:
' 1- Enter the array formula in top cell
Range("D2").FormulaArray = _
"=MAX(($A$2:$A$" & OutputLastRow & "=A2)*($B$2:$B$" & OutputLastRow & _
"=B2)*($C$2:$C$" & OutputLastRow & "))"
' 2- Then autofill down the column
Range("D2:D" & OutputLastRow).FillDown
另外,您可以使用AGGREGATE
函数来制作一个与您的公式完全等效的“普通”公式:
Range("D2:D" & OutputLastRow).Formula = _
"=Aggregate(14, 6, ($A$2:$A$" & OutputLastRow & "=A2)*($B$2:$B$" & OutputLastRow & _
"=B2)*($C$2:$C$" & OutputLastRow & "), 1)"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.