动态下拉列表 - 返回值

时间:2017-06-03 01:41:47

标签: excel

我有一个包含3列的电子表格。这些是姓名,年龄,价值

我想根据" name"中的唯一值创建一个incell下拉列表。柱。 "名称"中可能有两个单元格。专栏" John"以他们为例。即重复

当" John"在下拉列表中选择我想要创建另一个动态创建的下拉列表,该下拉列表仅显示条目的年龄。例如,如果有两行" John"在名称列中,另一个下拉列表应仅显示每个下拉列表的年龄值。根据两个选项ID,在值列中显示任何内容。

您认为我需要使用宏来实现这一目标吗?

更复杂的是,列表中的行数可能会随着时间的推移而发生变化,因此需要删除空白名称。 '忽略空白'创建incell下拉列表时什么都不做,它们仍会显示在列表中。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

根据您的描述,我认为您正在创建列表验证的下拉单元格。列表可以是初始数据库的子集。此类数据库的示例可能如下所示:

Initial List

使用经过验证的下拉列表,如:

With Drop Downs

这可以通过几个步骤来实现。

1)在帮助列中创建所有唯一名称的子集,我将在J中执行此操作。

=IFERROR(IF(NOT(INDEX($A$2:$A$20,MATCH(0,INDEX(COUNTIF($J$1:J1,$A$2:$A$20),0,0),0))=""),INDEX($A$2:$A$20,MATCH(0,INDEX(COUNTIF($J$1:J1,$A$2:$A$20),0,0),0)),NA()),"")

我正在测试uniques的范围只延伸到A20,但你可以随意选择。

2)由于您使用的是用户必须选择的验证列表,因此您应该按字母顺序排列它们。我在K的下一栏中这样做。

=IFERROR(INDEX(INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1),MATCH(ROWS($J$2:J2),COUNTIF(INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1),"<="&INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1)),0)),"")

此公式是一个数组公式,必须使用 ctrl + shift + enter 为第一个单元格输入,然后您可以填写。在near by cell中,让我们跟踪用于制作字母顺序列表的有意义名称占用的完整范围(无空格)。输入以下内容:

="K2:K"&SUMPRODUCT(--(LEN(J:J)>0))+1

请注意,这是假设我的唯一身份在第J列。如果你把它们放在别处,你需要修改它。

3)此时我们可以进行首次验证下拉菜单。我正在使用excel 2016所以我选择了我想要下拉的单元格(在我的情况下为E2),然后转到数据 - &gt;验证。在此我选择允许:列表;和来源:我输入以下内容:

=INDIRECT($K$1)

因为K1是我正在跟踪有用和按字母顺序排列的唯一的范围的单元格。例如:Validation

现在回到主页上我在E2中有一个下拉列表。接下来让我们构建有用年龄的子集。

4)在新的助手范围内(对我来说'M2:M10')输入以下内容:

=IFERROR(SUM(LARGE(IF(($A$2:$A$20=$E$2)*ROW($A$2:$A$20),$B$2:$B$20,""),COUNTIF($A$2:$A$20,"="&$E$2)-ROW()+ROW($M$2))),"")

这是另一个数组公式,必须使用 ctrl + shift + enter 提交,但与其他数组公式相反,您必须立即为整个范围输入此公式,我刚刚选择了少量细胞,因为我知道我不会超过几个年龄段。如果你怀疑你有更多的东西使这个范围变大。

以与名称相同的方式跟踪附近单元格中的有用年龄范围(我选择了N1)。

="M2:M"&COUNTIF((M:M),">0")+1

5)生成下一个经过验证的下拉菜单。选择一个单元格(我选择F2)并再次选择数据 - >验证,选择一个列表,然后使用年龄源:

=INDIRECT($N$1)

6)现在很容易获得与具有该年龄的个人相对应的价值。在下一个单元格中输入:

=SUM(IF((A2:A20=E2)*(B2:B20=F2),C2:C20))

你有它。我完成的工作表的示例如下:

Completely Functional

最后要提一提的是。执行此操作并切换到新名称时,它不会自动重置年龄下拉菜单。因此,为了使其显示重置,您可以使用一些聪明的条件格式。我格式化了F2&amp; G2具有以下规则并将字体颜色设置为白色:

Conditional Format

因此,当更改优先级更高的下拉列表时,每个单元格中的值都不会重置,但似乎空白,强制用户从该下拉列表中选择一个新的年龄。

祝你好运!