如何使 IF 语句在 Excel 2010+ 的整个 INDEX MATCH 中保持正确?
How to make an IF statement remain true throughout an INDEX MATCH in Excel 2010+?
我正在尝试使用 INDEX MATCH return 从与根据各种条件更改的值关联的项目列表中做出最佳选择。我当前的 sheet 设置和公式是这样的:
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))
(以数组公式形式输入)
在当前迭代中,这将 return Item1
。我想要 return Item3
.
在此示例中,'Sheet'!B3
包含要搜索的类别(在此示例中 Item
)。我根据该单元格中的数据使用各种命名范围,并使用 INDIRECT/SUBSTITUTE 作为后缀。我当前的公式找到的最大值也是 Good
,但是 return 是匹配它的第一个值,无论它是 Good
还是 Bad
。我尝试在公式的不同点添加额外的 IF 语句,但单元格会 return FALSE
或公式语法错误。如何在整个公式中维护我的 ="Good"
IF 语句?
谢谢!
您需要将 良好 条件加倍。一次确定最大数量,然后再次用最大数量确定项目。
这个非数组等效语法是我比数组方法更喜欢的语法。
=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 相对于主节点始终处于相同位置,则您可能想要放弃三个命名范围,而只使用一个带有 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 is considered a volatile function. These recalculate whenever anything in the workbook changes and should be avoided for that reason. However, you are already using the INDIRECT function 也被认为是不稳定的。
我正在尝试使用 INDEX MATCH return 从与根据各种条件更改的值关联的项目列表中做出最佳选择。我当前的 sheet 设置和公式是这样的:
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))
(以数组公式形式输入)
在当前迭代中,这将 return Item1
。我想要 return Item3
.
在此示例中,'Sheet'!B3
包含要搜索的类别(在此示例中 Item
)。我根据该单元格中的数据使用各种命名范围,并使用 INDIRECT/SUBSTITUTE 作为后缀。我当前的公式找到的最大值也是 Good
,但是 return 是匹配它的第一个值,无论它是 Good
还是 Bad
。我尝试在公式的不同点添加额外的 IF 语句,但单元格会 return FALSE
或公式语法错误。如何在整个公式中维护我的 ="Good"
IF 语句?
谢谢!
您需要将 良好 条件加倍。一次确定最大数量,然后再次用最大数量确定项目。
这个非数组等效语法是我比数组方法更喜欢的语法。
=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 相对于主节点始终处于相同位置,则您可能想要放弃三个命名范围,而只使用一个带有 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 is considered a volatile function. These recalculate whenever anything in the workbook changes and should be avoided for that reason. However, you are already using the INDIRECT function 也被认为是不稳定的。