我有一个定义的课程,日期和教师表。在Excel中,我显然可以过滤表只显示一个课程。我还可以创建另一个工作表并使用INDEX / MATCH数组公式来显示已过滤的表。但是,我试图定义一个命名范围,它将输出过滤表的二维数组。
Course Date Instructor
Winemaking 7/3 Fred
Paper Airplanes 7/16 Bill
Advanced Kazoo 7/22 Sally
Winemaking 8/6 Harry
Cooking 101-Toast 8/19 Beth
Advanced Kazoo 8/24 Xavier
Winemaking 9/14 Fred
Paper Airplanes 9/25 Lilly
我想将一个名为CourseWine的命名范围等于:
Winemaking 7/3 Fred
Winemaking 8/6 Harry
Winemaking 9/14 Fred
我希望有一个命名范围,因为它:
我尝试了几种组合(一种来自Excel - Array formula as name range not working),但每次命名范围只是我所需过滤输出的第一行。
=INDEX(Table,MATCH(1,(Table[Course]="Winemaking")*(Table[Date]>TODAY()),0),0)
=INDEX(Table,SMALL(IF(Table[Course]="Winemaking",ROW(Table[Course])-MIN(ROW(Table[Course]))+1),ROW(INDIRECT("1:"&COUNTIF(Table[Course],"Winemaking")))),0)
是否有一个公式,我可以定义一个命名范围,它将返回二维数组?我也可以使用数据透视表来实现这一点,但不能完全阻止某人更改表并从SharePoint中弄乱视图...我无法通过按课程而不是按日期对列表进行排序。我也想避免VBA。这甚至可能吗?
答案 0 :(得分:1)
要使用INDEX()从数组公式返回多个查找值,可以使用SMALL()而不是MATCH()来定位值。
根据您的情况,您可以使用此数组公式:
=IFERROR(INDEX(Table,SMALL(IF(("Winemaking"=Table[Course])*(Table[Date]>TODAY()),ROW(Table[Course])-MIN(ROW(Table[Course]))+1, ""),ROW(A1)),{1,2,3}),"")
注意:
这意味着如果您希望输出范围为D15:F20
...然后您将选择D15:F15,并使用Ctrl-Shift-Enter为该范围输入一次公式。
...然后您将第一个输入的范围复制到D16:F20。
重要的是将A1附近的A1作为相对参考输入。
最后的文字数组确保返回表格的相应列。
整个公式包含在IFERROR()中,以便在过滤结果的行数小于您输入公式的行数时,删除输出中显示的错误。