在Excel中创build可能出现在多个列中的dynamic下拉列表

通常,查找数组列中的值是唯一的,只需要将最后一个dynamic数据validation列表中的值与查找数组的相关列中的值相匹配,以提供下一个值的范围dynamic数据validation列表。 但是,列中的值不是唯一的,有没有办法在Excel中创builddynamic数据validation列表? 我认为这可以通过确保必须select多于一列中的值来提供第三个的dynamic范围来实现,例如,X必须已经在第一个下拉列表中select,而第二个中的Y按顺序查找第三个dynamic数据validation列表的值,但我不能解决问题。

作为一个例子,让我们说我的查找数组看起来像这样:

Field1,Field2,Field3 A,C,F A,C,G A,D,H B,E,I B,C,J B,C,K

如果我在第一个dynamic数据validation列表中selectB,第二个中selectC,那么我希望第三个范围是J和K,而不是F,G,J和K.

你必须为Field2Field3设置第二列。

如果你假设你的下拉列表位于单元格A10C10并且你的字段在列AC中,那么你可以转到D列,并使D1 =if($a$10=a1,b1,"")D2将是if(countif(d$1:d1,if($a$10=a2,b2,""))=1,"",if($a$10=a2,b2,"")) 。 您可以拖动D2,以获取所需的行数。 一旦你这样做,你把这个范围命名为Field2 (或者你在数据validation列表中使用的任何名称)。

对于Field3你基本上做同样的事情,除了你使用and 。 所以在E1你应该这样做=if(and($a$10=a1,$b$10=b1),c1,"")E2将会=if(countif(e$1:e1,if(and($a$10=a1,$b$10=b2),c2,""))=1,"",if(and($a$10=a1,$b$10=b2),c2,"")) 。 当你这样做的时候,你把它命名为Field3

缺点是下拉列表会有空白,而改变前两列之一不会重设最后一列。 为了克服这个缺陷,你必须在VBA中设置工作表变更事件。

编辑:

好吧,从头开始…我现在把A12-C12的下拉菜单。 表单

在D列和E列中,您仍然有基本的公式,但是您必须再制作3列才能进行独特化(这是一个技术术语,意思是使之独一无二)。 您无法在此图片中看到列H,但是它与field3模板相同。 这些都是数组公式,所以你不要在你键入CTRL-SHIFT-ENTER后按回车键。 你会知道你已经做对了,因为它会在公式中加上大括号。 一旦你把配方复制下来。

一旦你完成了,然后去公式定义名称。 在这里输入图像说明

一旦你填写了这样的名字 在这里输入图像说明

确保你改变countif的行来匹配你的数据,但是对于offset的第一个参数,你只需要select列表中的第一个单元格,并保持这两个0。

完成之后,根据上一步中的名称进行下拉菜单。

在这里输入图像说明

这应该让你到你想要的地方大约99%。 不幸的是,如果第一行在唯一列中是空白的,那么您仍然可以使用1空白。 我无法弄清楚如何摆脱它,但因为它只有一个空白,所以不应该太糟糕。 另外,如果您更改父级下拉菜单,则不会重置子级下拉菜单。