在行中命名。 列中的日期。 每个学生在给定日期的值都是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
答案 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))),"")
调整范围以适合您的数据。如果要匹配列标题的日期,请确保该日期的格式与H2中的搜索值相同。即,如果其日期存储为文本,则两者都必须是日期存储为文本。如果其为excel序列日期整数,则它们都必须为序列日期整数。