没有命名范围的数据验证

时间:2015-01-14 12:08:06

标签: excel

我有以下示例列表:

list

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

我想有2个下拉列表来选择任何选项及其子选项:

对于选项,我使用了数据验证 - 列表范围= $ A $ 8:$ A $ 12

options

对于子选项,我尝试了以下内容:

命名范围

它有效,但需要大量的手工工作来维护,因为子选项列表经常更新,而AFAIK我需要创建和维护许多命名范围,我有很多选项。

实施例

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

enter image description here

同样,这有效,但我试图避免维持200个命名范围。

没有使用命名范围或vba的任何解决方案?

1 个答案:

答案 0 :(得分:2)

最后,我使用动态数据验证来解决它:

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

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

这样的数据验证:

=INDIRECT(D2)

enter image description here

编辑:正如Aprillion所提到的,只有在按字母顺序按升序排序选项列表时,这才有效。在我的情况下,它总是那样,但知道另一个解决方案与未分类的数据将是有趣的。此外,在这个例子中,可以避免隐藏列和使用= indirect(连接...在数据验证中,但在我的情况下,我在单独的工作表中有列表,并且不可能引用数据验证列表外部工作簿或工作表。

一个问题是,一旦用户选择了一个选项和相应的子选项,然后再次更改该选项,即使子选项未映射到新选项,子选项仍会被选中。我找到了一个解决方案,当C2已经有一个值时,使用假列表作为数据验证的来源:

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