没有命名范围的数据validation

我有以下的例子列表:

名单

注意:在我的真实列表中,我有大约200个选项和400个子选项

我想有2个下拉列表来select任何选项,它的子选项:

对于选项,我使用数据validation – 列表范围= $ A $ 8:$ A $ 12

选项

而对于子选项,我尝试了以下方法:

命名的范围

它的工作原理,但它需要大量的手动工作来维护,因为子选项列表更新频繁和AFAIK我需要创build和维护许多命名范围尽可能多的选项。

Named Range: _ABC05 Refers To: =Sheet1!$D$9:$D$10 Data validation: = INDIRECT(CONCATENATE("_";SUBSTITUTE(A2;"-";""))) 

在这里输入图像描述

再次,这个工程,但我试图避免保持200个命名范围。

任何解决scheme,而不使用命名的范围或VBA?

最后我使用dynamic数据validation来解决它:

在隐藏的D列中,我有以下公式:

 =CONCATENATE("D";MATCH(A2;$C$8:$C$15;0)+7;":D";MATCH(A2;$C$8:$C$15;1)+7) 

数据validation是这样的:

 =INDIRECT(D2) 

在这里输入图像说明

编辑:正如所提到的Aprillion,这只会工作,如果选项列表按字母顺序升序sorting。 在我的情况下,总是这样,但知道另一个解决scheme与未分类的数据将是有趣的。 此外,在这个例子中,可以避免隐藏的列和use = indirect(concatenate …在数据validation中,但在我的情况下,我有一个单独的工作表中的列表,并且不可能引用数据validation列表外部工作簿或工作表。

一个问题是,一旦用户select一个选项和相应的子选项,然后再次更改选项,即使没有映射到新选项,子选项仍然被选中。 我发现了一个解决scheme,它使用一个伪造的列表作为数据validation的来源,当C2已经有一个值时:

 =IF(C2="";INDIRECT("$A$8:$A$12");INDIRECT("FakeList"))