使用带数组公式的if语句为相关下拉列表指定范围

时间:2018-08-28 08:44:54

标签: excel excel-formula

在寻找了一些之后陷入了困境...

我有一个包含以下内容的电子表格:

   A              B                  C
+------+----------------------+--------------+
| Code |         Desc         |     Type     | 1
+------+----------------------+--------------+
|    1 | Main item            | Activity     | 2
|  1.1 | Sub item             | Sub-activity | 3
|  1.2 | Another sub item     | Sub-activity | 4
|    2 | Another main item    | Activity     | 5
|  2.1 | Yet another sub item | Sub-activity | 6
+------+----------------------+--------------+

我想基于活动创建一个下拉列表。我可以在典型的单元格中执行此操作(使用ctrl + shift +输入数组公式):

={if(c2:c6="Activity",a2:a6,"")}

但是我不知道如何正确地将该公式放入命名范围。当我按Ctrl + Shift + Enter时,没有大括号出现。如果没有括号,它似乎也不起作用(它将值显示为{...})。

有没有办法使这项工作成功?

预先感谢

2 个答案:

答案 0 :(得分:1)

最后,这不可能通过命名范围来实现;基于以上达伦评论中的blog pagethis link,我最终做了一个带有偏移量和两个枢轴的依赖下拉列表的变体。可能有些矫kill过正,但至少我知道我是怎么做到的。

设置第一个下拉数据源和该下拉菜单的数据验证

  1. 对于第一个列表,我从下拉数据源创建了一个透视图,其中包含列“ Type”的行和计数“ Type”的值(这些值并不相关,但是我发现它对于仅知道以后依赖项的期望如何)。此枢轴位于新工作表的标准默认枢轴位置中,其中标题行从A3开始。默认情况下,使用数据透视表也会按字母顺序(我想要的)对其进行排序。总列数的总和。

  2. 然后我使用以下公式创建一个命名范围(“ costCategory”):

    =OFFSET('PivotSheet'!$A$4,0,0,COUNTA('PivotSheet'!$A$4:$A$100),1)

    这基本上列出了所有项目,并删除了所有空白。它不像我所希望的那样动态,但是我认为我不可能超过列表上的〜100个项目,所以我决定忍受它。

  3. 我使用以下公式创建了另一个命名范围(“ emptyList”):

    ={""}

    这样,如果选择了第二个相关的依赖项,我也可以锁定第一个下拉列表(以防止出现奇怪的不匹配数据问题)。

  4. 对于需要下拉列表的表行,我使用以下公式为列表添加了数据验证:

    =IF(ISBLANK($B3),costCategory,emptyList)

    其中$ B3是第二个相关的下拉位置。

设置第二个相关的下拉数据源和数据验证 5.我从相同的数据源创建了另一个数据透视表,其中包含“ Type”和“ Desc”行,以及“ Type”的计数值(同样,这些值并不重要)。数据透视图布局设置为表格形式,重复标签,没有总计或小计。我将此枢轴与另一个枢轴并排放置,第一行标题行从E3开始。它也是alpha排序。

  1. 我放入了帮助器列,以确定从属下拉列表的特定父级列表的起始位置,以及该列表的行数。它使用与第一个下拉列表相同的任意长距离方法-只是将一些行放在数据透视图中不太可能被超过。在C行中,为了获取依赖数据开始的第一行,我输入了以下公式:

    =ROW(INDEX('PivotSheet'!$F$4:$F$200,MATCH($A3,'PivotSheet'!$E$4:$E$200,0)))

    在列D中,为了获得存在相关数据的列数,我使用以下公式:

    =(LOOKUP(2,1/('PivotSheet'!$E$4:$E$200=$A3),ROW('PivotSheet'!$F$4:$F$200))-ROW(INDEX('PivotSheet'!$F$4:$F$200,MATCH($A3,'PivotSheet'!$E$4:$E$200,0))))+1

  2. 最后,在具有依赖项下拉列表(列B)的列中,我使用了以下数据验证规则:

    =OFFSET('PivotSheet'!$F$1,$C3-1,0,$D3,1)

    基本上,它会使用在辅助列中找到的范围作为下拉列表。

扩展这些公式后,它们会递增(从A3到A4,从B3到B4,等等),因此即使您向列表对象表中添加行,它们也仍然可以工作。

答案 1 :(得分:0)

在D列中创建一个帮助列并编写简单公式

  

= IF(C2 =“ Activity”,A2,“”)

一旦有了D列,就可以从D列创建一个列表,而忽略所需的空白单元格。

P.S。如果您不关心空白单元格,请使用E2列中的公式并将其拖到下面,这将为您提供要在列表中看到的连续值。

  

= IFERROR(SMALL($ D $ 2:$ D $ 6,ROW()-1),“”)