我正在尝试使用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语句?
谢谢!
答案 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,这也被认为是不稳定的。