Excel 如何创建具有动态验证列表的下拉列表

Excel 如何创建具有动态验证列表的下拉列表,excel,excel-formula,excel-2010,Excel,Excel Formula,Excel 2010,我有一个包含“Category”和“Product”列的数据表。产品名称不唯一,类别名称不唯一,但组合类别产品在表中仅显示一次。此数据表未以任何方式排序 Category  Product ========  ======= Chairs      Victorian Chairs      Beautiful Chairs      Edwardian Chairs      Gross Tables      Victorian Tables      Edwardian T

我有一个包含“Category”和“Product”列的数据表。产品名称不唯一,类别名称不唯一,但组合类别产品在表中仅显示一次。此数据表未以任何方式排序

Category  Product

========  =======

Chairs      Victorian

Chairs      Beautiful

Chairs      Edwardian

Chairs      Gross

Tables      Victorian

Tables      Edwardian

Tables      Huge

Tables      Kool

Tables      Lambda

Closets     Edwardian

Closets     Excellent

Closets     Major

Closets     Hello

Chairs      Huge

Tables      Picturesque

Closets     Picturesque

Chairs      Incredible

Closets     Minor

Chairs      Just

Chairs      Kool
我已经创建了具有唯一类别名称的临时表,它将用作第一个下拉列表的验证范围。这部分按它应该的方式工作

Categories

==========

Chairs

Tables

Closets
在第一个下拉列表旁边,我有另一个下拉列表,它应该已经动态创建了上一个下拉列表中所选类别的产品列表

如果只是一对下拉列表(类别/产品),我可以使用临时列创建令人满意的结果

Category:   Chairs           Product: Victorian

                                                  Beautiful

                                                  Edwardian

                                                  Gross

                                                  Huge

                                                  . . .
问题是这个下拉列表对应该是另一个表的一部分,该表的列为:“Category”、“Product”、“Amount”。所以,当用户在第一列中选择类别下拉列表值“Chairs”时,在下一列中,下拉列表应仅在类别“Chairs”中的产品中可用。在下一行中,当用户选择类别“表”时,相邻单元格中应该只有类别“表”中的产品可用

我正在尝试使用公式、数组公式、命名函数(不要将它们与UDF函数混淆),而不使用VBA代码

是否有可能这样做,或者我在浪费我的时间(已经2天了)

Excel文件,其中包含我已执行的操作:

更新(2019-09-30):

在一条评论中发现: “但是,Excel不允许您在数据验证中使用数组公式,”。。。费尔南多·J·里维拉11月4日至17日


因此,这意味着不可能进行动态数据验证。

解决此问题的方法是在数据验证窗口中使用
IF
函数

它检查类别列的单元格
F3
,并查看它是否与单元格
B2
中的字符串匹配。如果有,则使用列表下的验证列表,如果没有,则使用另一个列表。这可以通过嵌套IF语句扩展到壁橱等


缺点是,就我现在所见,必须对每一行分别进行验证。

我通常做的是使用从第一个下拉列表中获得的不同结果创建命名范围。在这种情况下:如下图所示的3个范围:

一旦我有了这个,我就使用
间接
调用如下所示的正确范围(考虑到您的第一个下拉列表是在单元格E6上):

这种方法的唯一挑战是,如果有许多不同的二级下拉列表,可能会有点耗时。使用Excel()即将更新的数组公式,这将更快、更容易(正如google电子表格中已经出现的那样)


祝你好运

这是一个很好的答案,我只建议您为OP提供一种快速方法,为每个主要类别创建单独的列表。例如,使用
透视表
?这对我不起作用。我有数百个类别和数百种产品。我提供的Excel文件是用于演示的。无论如何,感谢您的贡献。@TerryW:Pivot表可以工作,但是在表中每个新的具有定义对的条目上,Pivot都应该被刷新-这需要VBA和on_change事件,这是我试图避免的。@user1439700抱歉,我没有彻底阅读您的问题。如果您想在一列中放置数百个主要类别,并在其旁边放置每个主要类别的产品下拉列表,则仍然需要为每个类别创建所需数量的命名范围。使用power query或pivot table可以快速获得范围,即使是数百个类别。唯一的问题是powerquery或pivot表都需要数据刷新来更新新条目的列表。否则,即使使用Excel 365中的beta函数过滤器,也可能无法实现您想要的功能。@TerryW:我们将不得不等待过滤器功能的实现……您没有浪费时间,因为它可以在Excel中实现,但我很惊讶您花了两天时间无法在线找到答案@保罗指出了正确的方向。您只需为每个子类别创建一个列表,并按主类别命名,然后按照说明创建下拉列表。这对我不起作用。我有数百个类别和数百种产品。我提供的Excel文件是用于演示的。无论如何,谢谢你的贡献。
=IF($F$3=$B$2,$B$3:$B$10,$C$3:$C$10)
=INDIRECT(E6)