如何在Excel 2010+的INDEX MATCH中保持IF语句的真实性?

时间:2015-04-15 16:17:03

标签: excel excel-formula excel-2010

我正在尝试使用INDEX MATCH从与基于各种条件而变化的值相关联的项目列表中返回最佳选择。我目前的工作表设置和公式是:

A     B    C
Item1 Bad  27
Item2 Good 15
Item3 Good 27
Item4 Bad  44

A列是命名范围Item B列是一个命名范围ItemType C列是命名范围ItemValue

=INDEX(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")),MATCH(MAX(IF(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Type")="Good",INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Value"))),INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Value"),0))

(作为数组公式输入)
在其当前迭代中,这将返回Item1。我希望它返回Item3

在此示例中,'Sheet'!B3包含要搜索的类别(在此示例中为Item)。我根据该单元格中的数据使用各种命名范围,使用INDIRECT / SUBSTITUTE后缀。我当前的公式找到的最高值也是Good,但随后会返回与其匹配的第一个值,无论它是Good还是Bad。我尝试在公式的不同点添加额外的IF语句,但单元格将返回FALSE或公式语法错误。如何在整个公式中保留="Good" IF语句?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要加倍 Good 条件。一旦确定最大数量,然后再用最大数字确定项目。

这个非数组等价物是我更喜欢数组方法的语法。

=INDEX(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")), MAX(INDEX(ROW(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")))*(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Type")="Good")*(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Value")=MAX(INDEX(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Value")*(INDIRECT(SUBSTITUTE('Sheet'!B3," ","")&"Type")="Good"), , ))), , )))

这是你的数组方法。

=INDEX(INDIRECT('Sheet'!B3), MATCH(MAX(IF(INDIRECT('Sheet'!B3&"Type")="Good",INDIRECT('Sheet'!B3&"Value"))), IF(INDIRECT('Sheet'!B3&"Type")="Good", INDIRECT('Sheet'!B3&"Value")), 0))

如果 ___ Type ___ Value 始终位于相对于primary的相同位置,您可能想要放弃三个命名范围,只使用一个命名范围OFFSET

=INDEX(INDIRECT('Sheet'!B3), MATCH(MAX(IF(OFFSET(INDIRECT('Sheet'!B3), 0, 1)="Good",OFFSET(INDIRECT('Sheet'!B3), 0, 2))), IF(OFFSET(INDIRECT('Sheet'!B3), 0, 1)="Good", OFFSET(INDIRECT('Sheet'!B3), 0, 2)), 0))

OFFSET function被视为易失性功能。无论何时工作簿中的任何内容发生更改,都会重新计算,因此应该避免。但是,您已经在使用INDIRECT function,这也被认为是不稳定的。