是否可以使用公式来模拟excel中的过滤器功能?

时间:2019-06-17 14:29:27

标签: excel excel-formula

在行中命名。 列中的日期。 每个学生在给定日期的值都是1,“ x”或没有值。

我有一个下拉列表,其中列出了表格中所有日期的列表(列)。

我想创建一个公式,该公式将在我的表中搜索匹配日期,然后在该列中查找所有值1,并为我提供名称列表。

这本质上是一种自动填充的动态过滤器功能。

我考虑过几个公式(索引匹配,索引匹配匹配,小行),甚至数据透视表,但都没有运气。主要问题似乎是使公式中的日期(列地址)动态化。

=IFERROR(SMALL(IF((GANTT!$FT$14:$FT$1003=1),GANTT!$A$14:$A$1003,""),ROW()-16),"")

在上面的公式中,FT对应于日期Sunday, 7 Oct 2018,并为FT的静态列生成所有正确的名称。如何制作FT变量并将其链接到下拉列表?我可以通过某种方式使用地址和间接地址吗?

我可以使用某种辅助单元格来告诉公式使用哪一列,而不是搜索多年的数据吗?

抱歉,我不知道如何发布示例数据表。

NAME | DATE1 | DATE2 | DATE3
JON  |       |     1 |     4
Jane |       |     0 |     1
BILL |     1 |       |     2

1 个答案:

答案 0 :(得分:0)

假设  -您的数据布局在B2:E5范围内  -目标日期选择单元格H2  -J列中的结果

第1步-确定目标列

将使用“匹配”来确定所需的列

MATCH(H2,A2:E2,0)

第2步-在列中找到其中包含1的行

为此要使用AGGREGATE函数。它将对所有行执行类似于计算的数组。您将行号除以搜索条件。所有错误的值都将导致被零除的错误,并且将被忽略,仅保留您要查找的内容。

AGGREGATE(14,6,row(B3:B5)/(index(B3:E5,0,MATCH(H2,A2:E2,0))=1),A1)

第3步-从相应的行中提取名称

使用INDEX引用您的名称列表,即可将您感兴趣的行号提供给它。

INDEX(B:B,AGGREGATE(15,6,ROW($B$3:$B$5)/(INDEX($B$3:$E$5,0,MATCH($H$2,$B$2:$E$2,0))=1),ROW(A1)))

如果将其包装在IFERROR函数中以防匹配名称用尽,则可以显示“”而不是错误消息。您可以在J2中放置以下公式并复制下来:

=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($B$3:$B$5)/(INDEX($B$3:$E$5,0,MATCH($H$2,$B$2:$E$2,0))=1),ROW(A1))),"")

POC

调整范围以适合您的数据。如果要匹配列标题的日期,请确保该日期的格式与H2中的搜索值相同。即,如果其日期存储为文本,则两者都必须是日期存储为文本。如果其为excel序列日期整数,则它们都必须为序列日期整数。