【问题标题】:index-small-if with multiple criterias from the same columnindex-small-if 具有来自同一列的多个条件
【发布时间】:2015-04-23 17:24:18
【问题描述】:

我有以下 index-small-if 数组公式,如果我有一个条件 =SalesOrderId,则效果很好。

=IFERROR(INDEX(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line,SMALL(IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId]=SalesOrderId,ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1),ROWS(A$28:A28)),13),"")

现在,如果我有一个名为“SalesOrderId2”的第二个标准,它查找与第一个标准相同的数据,我无法从单元格 A28 向上显示两个标准的结果。

【问题讨论】:

  • 您是否考虑过添加一个辅助列,将 SalesOrderId 和 SalesOrderId2 合二为一,然后通过标准的VLOOKUP 查找?我建议这样做的原因是,虽然有用,但数组函数可能非常昂贵,因为它会检查所有值两次以找到单个结果。
  • 我不确定我是否理解正确。可以举个例子吗?
  • Here is an illustrated step-by-step guide 这应该有助于解释我的意思,如果这不符合您的需要,我们可以尝试其他方法。
  • 很遗憾,这不起作用,因为criteri1 和criteria2 的范围是相同的。

标签: excel indexing


【解决方案1】:

您说您有一个有效的公式,但在我看来,现有公式存在问题,或者它是为非常特定的目的而设计的。无论如何,我会相信你的话,这就是你想要的。

您尚未透露此添加的标准是否应属于 ANDOR 品种,因此这里既是替代标准也是替代标准。

对于 table[SalesOrderId]=SalesOrderId AND table[SalesOrderId2]=SalesOrderId,

=IFERROR(INDEX(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line, SMALL(IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId]=SalesOrderId, IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId2]=SalesOrderId, ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1)), ROWS(A$28:A28)), 13),"")

对于 table[SalesOrderId]=SalesOrderId OR table[SalesOrderId2]=SalesOrderId,

=IFERROR(INDEX(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line, SMALL(IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId]=SalesOrderId, ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1, IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId2]=SalesOrderId, ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1)), ROWS(A$28:A28)), 13),"")

重新阅读您的问题后,我发现我可能已经翻转了列名和条件。如果您实际上正在寻找更接近 For table[SalesOrderId]=SalesOrderId OR table[SalesOrderId]=SalesOrderId2,

=IFERROR(INDEX(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line, SMALL(IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId]=SalesOrderId, ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1, IF(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId]=SalesOrderId2, ROW(Table_michael_pc_inflowsql_inFlow_SO_SalesOrder_Line[SalesOrderId])-1)), ROWS(A$28:A28)), 13),"")

我相信您知道,数组公式需要使用 Ctrl+Shift+Enter↵ 完成。

顺便说一句,您可以使用上下文菜单命令表格工具 ► 设计 ► 属性 ► 表格名称重命名表格,这样示例公式就不会那么混乱了。

【讨论】:

  • 我已经尝试过 ANDOR 了,很遗憾没有用。变化的不是范围,而是不同的标准。
  • 你是我今天的英雄。这正是我一直在寻找的。我尝试了多个if,但可能放错了。非常感谢。
  • 我在使用这个公式时还有一个障碍。有时我在标准 SalesOrderId2 中有数据,有时它是空白的。现在,如果 SalesOrderId2 为空,公式不会显示任何结果。我怎样才能使这个公式适用于一个或两个标准?
  • @Michael.M - 如果遇到空白,我有点不清楚您想要返回的内容。当然,您可以在 IF 中加倍计算,但要避免计算两次。可能有一种方法可以将错误抛出到公式的第二部分。您能否编辑您的原始问题(或开始一个新问题)以进一步描述情况和预期结果?
  • 我开始了一个新问题。 index-small-if 具有来自同一列的一个或多个条件
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多