Excel - 使用数组公式

时间:2015-07-14 18:51:26

标签: excel-formula

我有一个定义的课程,日期和教师表。在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

我希望有一个命名范围,因为它:

  1. 使用SharePoint Excel Web部件显示非常容易
  2. 不需要更新助手表
  3. 不太可能被编辑电子表格的其他用户搞砸了
  4. 我尝试了几种组合(一种来自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。这甚至可能吗?

1 个答案:

答案 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}),"")

注意:

  1. 应为输出的第一行的所有单元格输入公式,然后逐行复制。
  2. 这意味着如果您希望输出范围为D15:F20

    ...然后您将选择D15:F15,并使用Ctrl-Shift-Enter为该范围输入一次公式。

    ...然后您将第一个输入的范围复制到D16:F20。

  3. 重要的是将A1附近的A1作为相对参考输入。

  4. 最后的文字数组确保返回表格的相应列。

  5. 整个公式包含在IFERROR()中,以便在过滤结果的行数小于您输入公式的行数时,删除输出中显示的错误。