我在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
感谢您的时间!
您的公式是正确的,但是您没有偏移行。
你的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)),"",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(Data!$A$8004)+1),ROW(1:1)),1))}