【问题标题】:How to make an IF statement remain true throughout an INDEX MATCH in Excel 2010+?如何使 IF 语句在 Excel 2010+ 中的整个 INDEX MATCH 中保持正确?
【发布时间】:2015-04-15 16:17:03
【问题描述】:

我正在尝试使用 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 语句?

谢谢!

【问题讨论】:

  • 我认为你不会得到答案。请提供您在sheet 中拥有的数据的快照,以及您希望基于您提供的采样数据的解决方案。
  • @dimitris_ps 与sheet 中的公式相关的唯一数据是单元格B3,其中包含Item,以便将间接替代项指向正确的命名范围。命名范围位于单独的source 工作表中。正如我所提到的,在这种情况下,我希望解决方案是 Item3,因为这是 C/ItemValue 列中的最大值,也是 B/ItemType 列中的 Good。希望这可以解决问题。

标签: excel excel-formula excel-2010


【解决方案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 相对于主节点始终处于相同位置,您可能希望放弃三个命名范围,而只使用单个命名范围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,这也被认为是不稳定的。

【讨论】:

  • 我能够使用数组方法达到预期的结果,我将尝试切换到OFFSET 看看情况如何。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多