2015-10-12 111 views
0

我正在寻找我认为会是一个非常简单的公式来编译基于标准的名称列表。例如,我会在列A中列出50个员工姓名,然后在列B中的每个姓名旁边都会显示“Y”或“N”。然后,我想在电子表格列表中另有一个标签,列出每个人的姓名列B中的“Y”值。我不希望新选项卡上列表中的名称之间出现空行(这就是为什么我没有成功使用IF语句)。我也想避免手动过滤空白行。Excel公式提取多个匹配值

+0

看看使用数据透视表。 – rwilson

回答

0

比方说你的第一张工作表Sheet1是在 2页A1上输入:

=IF(ISERROR(INDEX(Sheet1!A:A,MATCH("Y",Sheet1!B:B,0))),"",INDEX(Sheet1!A:A,MATCH("Y",Sheet1!B:B,0))) 

在A2上输入:

=IF(ISERROR(INDEX(INDIRECT("Sheet1!A"&MATCH(A1,Sheet1!A:A,0)+1&":A50"),MATCH("Y",INDIRECT("Sheet1!B"&MATCH(A1,Sheet1!A:A,0)+1&":B50"),0))),"",(INDEX(INDIRECT("Sheet1!A"&MATCH(A1,Sheet1!A:A,0)+1&":A50"),MATCH("Y",INDIRECT("Sheet1!B"&MATCH(A1,Sheet1!A:A,0)+1&":B50"),0)))) 

而只需将第二个公式下来。

请注意,我假设您的第一张纸包含50行,如您所写,否则需要进行额外的修改。

+0

可能值得一提的是,IFNA是在Excel 2013中引入的。 – Jeeped

+0

@Jeeped,我会记下您的注释并更改我的答案以便if(iserror)这样使用它不会依赖于新的Excel版本。 – Balinti

+0

实际上,[IFERROR函数](https://support.office.com/en-us/article/IFERROR-function-F59BACDC-78BD-4924-91DF-A869D0B08CD5)似乎是一个可接受的标准(在XL2007中引入) 。这样,你不必像“IF(ISERROR(...),”,“,...)那样将公式翻倍。 – Jeeped

0

您正在查找的公式非常复杂,需要循环计算。出于这个原因,不建议使用长达数百或数千个“名称”的名单,但列出50个名称应该不会造成明显的困难。

随着在Sheet1的A2名称:A51,用这个公式中注定的工作表来接收Ÿ名。

=IFERROR(INDEX(Sheet1!$A$2:$A$51, AGGREGATE(15, 6, ROW($1:$50)/(Sheet1!$B$2:$B$51="Y"), ROW(1:1))), "") 

根据需要填写。请注意,AGGREGATE¹ function正在返回 A2:A51中的位置ROW(1:50)

检索非ý名称应该改变初级条件(Sheet1!$B$2:$B$51="N")(Sheet1!$B$2:$B$51<>"Y")一个简单的事情。

对于pre XL2010的情况,此标准公式执行相同的过滤检索。

=IFERROR(INDEX(Z!$A$2:$A$51, SMALL(INDEX(ROW($1:$50)+(Z!$B$2:$B$51<>"Y")*1E+99, ,), ROW(1:1))), "") 

¹AGGREGATE function用Excel 2010中引入的。它是不是在早期版本。