Excel 如果同一列中有多个标准,则索引较小

Excel 如果同一列中有多个标准,则索引较小,excel,indexing,Excel,Indexing,我有下面的索引小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_SalesO

我有下面的索引小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]=SalesOrderId和表[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),"")
=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),"")
对于表[SalesOrderId]=SalesOrderId或表[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),"")
=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),"")
在重读了你的问题之后,我发现可能是我翻了一下列名和标准。如果您实际上是在为表[SalesOrderId]=SalesOrderId或表[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来完成↵.


顺便说一句,您可以使用上下文菜单命令“表格工具”重命名表格► 设计► 性质► 表名,这样示例公式就不那么容易混淆。

您是否考虑过添加一个将SalesOrderId和SalesOrderId2合并为一个的帮助器列,然后通过标准的
VLOOKUP
查找它?我建议这样做的原因是,虽然数组函数很有用,但它可能会非常昂贵,因为它会对所有值进行两次检查以找到一个结果。我不确定我是否理解正确。你能给我举个例子吗?这应该有助于解释我的意思,如果这不符合你的需要,我们可以尝试其他方法。不幸的是,这不起作用,因为标准1和标准2的范围是相同的。我尝试过,或者已经尝试过,不幸的是不起作用。改变的不是范围,而是不同的标准。你是我心目中的英雄。这正是我想要的。我尝试了多重if,但可能放错了。非常感谢。这个公式还有一个障碍要克服。有时我在SalesOrderId2中有数据,有时是空白的。现在,如果SalesOrderId2为空,则公式不会显示任何结果。我怎样才能使这个公式适用于一两个标准?@Michael.M-我有点不清楚如果遇到空白,你想要返回什么。当然,你可以在IF中把事情加倍,但你要避免计算两次。可能有一种方法可以将错误引入公式的第二部分。你能编辑你原来的问题(或开始一个新问题)来进一步描述情况和预期结果吗?我开始了一个新问题。如果同一列中有一个或多个标准,则索引较小