繁体   English   中英

VBA中的数组公式错误

[英]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)"

您实际上并不需要VBA。 D1输入以下数组公式(使用Ctrl + Shift + Enter而不是Enter),然后将其向下拖动

=MAX(IF(A1&B1=$A$1:$A$7&$B$1:$B$7,$C$1:$C$7))

您的输出应如下所示:

在此处输入图片说明

该公式起作用是因为MAX和MIN忽略A1&B1 = $A$1:$A$7&$B$1:$B$7的FALSE值,并且仅对其余结果进行运算。 数组公式使得A1&B1$A$1:$A$7&$B$1:$B$7的“当前行”值进行比较。 我想您可以像这样锁定$A1&$B1列,但是在您的示例中,这不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM