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

问题描述 投票:1回答:1

我在Excel工作表中有一个数据表(数据!$ 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日,并被归类为“一般”类型。

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

{=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列值,例如:“*** May-2017”在其F列中。但事实并非如此。

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

https://drive.google.com/open?id=1NpS0_Bsy8XuicrPl8oy5tAswEa9QZ9X2

感谢您的时间!

excel indexing excel-formula match
1个回答
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))}

© www.soinside.com 2019 - 2024. All rights reserved.