EXCEL:使用两个条件搜索数据表并将行输出到新表

时间:2017-12-14 16:16:46

标签: excel indexing excel-formula match

我在Excel工作表中有一个数据表(Data!$ A $ 8004:$ F $ 10430),我需要搜索包含单元格中显示日期的所有行:Data!Q27(例如2017年5月) )在数据表的F列中。然后在新表中输出与该特定日期匹配的所有行(Data!Q27更改,但始终采用MMM-YYYY格式)

我为另一个工作表创建了一个类似的解决方案,但是对于这个数据表,它不起作用。工作解决方案如下所示:

=IF(ISERROR(INDEX(Data!$A$1:$K$7523,SMALL(IF(RIGHT(Data!$A$1:$A$7523,7)=Data!$Q$25,ROW(Data!$A$1:$K$7523)),ROW(1:1)),1)),"",INDEX(Data!$A$1:$K$7523,SMALL(IF(RIGHT(Data!$A$1:$A$7523,7)=Data!$Q$25,ROW(Data!$A$1:$K$7523)),ROW(1:1)),1))

(这与表中的日期格式略有不同,Data!Q25是/ mmm / yy,但它成功创建了新表,该表根据Data中的值更改值!Q25)

F栏中日期的格式为例如2017年5月9日,并且被归类为“一般”和“#39;类型。

我已使用此公式,并且我在此代码所在的单元格上没有错误或值:

{=IF(ISERROR(INDEX(Data!$A$8004:$F$10430,SMALL(IF(RIGHT(Data!$F$8004:$F$10430,8 )=Data!$Q$27,ROW(Data!$A$8004:$F$10430)),ROW(1:1)),1)),"",INDEX(Data!$A$8004:$F $10430,SMALL(IF(RIGHT(Data!$F$8004:$F$10430,8)=Data!$Q$27,ROW(Data!$A$8004:$F$1 0430)),ROW(1:1)),1))}

公式被格式化为数组,因此我相信此代码应该有效,返回符合条件的行的第一个A列值,例如:" *** 2017年5月&# 34;在其F栏中。然而,它并没有。

不幸的是,由于公司保护,我无法共享电子表格,但如果此处提供的信息不够清晰,我可以提供新的Excel表格以显示我的示例吗?

https://drive.google.com/open?id=1NpS0_Bsy8XuicrPl8oy5tAswEa9QZ9X2< - 这是我重新创建的电子表格,以显示问题。真正的电子表格是不同的,但这显示了我的问题的目的。无论选项卡名称和普通用户的数据是否有值,都不会显示任何数据。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您的公式是正确的,但是您没有偏移行。

您的INDEX()从第8行开始,因此这将是第一个索引行。 SMALL()正在构建一个确切行号的数组,因此SMALL()中的第8行是索引中的第1行,因此没有显示结果。

您只需要更新IF()中的SMALL()来处理此偏移:(此公式已更新以响应公式拖动,我将包含您的原始文件)

=IFERROR(INDEX(ConfidentialLiveData!A$8:A$14,SMALL(IF(RIGHT(ConfidentialLiveData!$F$8:$F$14,8)=ConfidentialLiveData!$C$2,ROW(ConfidentialLiveData!$A$8:$A$14)-7),ROW(1:1))),"")

或者

=IF(ISERROR(INDEX(ConfidentialLiveData!$A$8:$J$14,SMALL(IF(RIGHT(ConfidentialLiveData!$F$8:$F$14,8)=ConfidentialLiveData!$C$2,ROW(ConfidentialLiveData!$A$8:$J$14)-7),ROW(1:1)),1)),"",INDEX(ConfidentialLiveData!$A$8:$J$14,SMALL(IF(RIGHT(ConfidentialLiveData!$F$8:$F$14,8)=ConfidentialLiveData!$C$2,ROW(ConfidentialLiveData!$A$8:$J$14)-7),ROW(1:1)),1))

错误处理公式的快速提示是在突出显示公式的各个部分时使用F9来显示计算的内容。例如,我突出显示IF(RIGHT(ConfidentialLiveData!$F$8:$F$14,8)=ConfidentialLiveData!$C$2,ROW(ConfidentialLiveData!$A$8:$J$14))并看到计算结果为{8;FALSE;10;11;FALSE;FALSE;FALSE},因此找到的匹配只是返回的行号不是我们要查找的内容。

<强>更新

所以你的公式从第8004行开始,索引中的那一行是第1行。要返回该行,你需要从8109中取出8003,以获得第106个索引行。一种常见的方法是取走起始行并添加原始公式中的1:{=IF(ISERROR(INDEX(Data!$A$8004:$F$10430,SMALL(IF(RIGHT(Data‌​!$F$8004:$F$10430,8 )=Data!$Q$27,ROW(Data!$A$8004:$F$10430)-ROW(Data!$A$8004)+1)‌​,ROW(1:1)),1)),"",IN‌​DEX(Data!$A$8004:$F $10430,SMALL(IF(RIGHT(Data!$F$8004:$F$10430,8)=Data!$Q$27,RO‌​W(Data!$A$8004:$F$1 0430)-ROW(Data!$A$8004)+1),ROW(1:1)),1))}