Excel条件动态数据验证

时间:2014-02-28 09:12:36

标签: excel validation

使用Excel时我遇到了一个小问题。以下是问题定义:

我想要对下表进行条件数据验证:

Column 1  Column 2
Y         Res1
Y         Res2
N         Res3
N         Res4
Y         Res5

从上表中,我需要一个单元格下拉列表(使用数据验证),其中列2中的值列表在列1中具有“Y”值。是否可以?如果是的话,你能帮帮我吗?我们将不胜感激。

请注意:我不想为此编写Excel VBA,通过VBA我可以这样做..但要求是与公式有关。

2 个答案:

答案 0 :(得分:1)

只需使用此数组公式,然后复制:

=INDEX($B$1:$B$5;SMALL(IF($A$1:$A$5="Y";ROW($A$1:$A$5)-ROW($A$1)+1;"");ROWS($A$1:A1)))

别忘了按Ctrl Shift Enter

所以将公式更改为

=IFERROR(INDEX($B$1:$B$5;SMALL(IF($A$1:$A$5="Y";ROW($A$1:$A$5)-ROW($A$1)+1;"");ROWS($A$1:A1)));"")

想象一下,你正在D1中编写公式,向下复制直到最大可能匹配(例如D1:D100并将此范围命名为myrange)复制到结束(直到你得到至少一个空单元格)。现在在Source for List DataValidation中编写此公式:

=OFFSET(D1;0;0;MATCH("";myrange;0)-1;1)

答案 1 :(得分:0)

感谢CRondao和Fagun ......

这是最后的答案,我正在单独写作,因为已经有更多的辩论发生了。所以用户在不浪费时间阅读评论的情况下,可以直接来到这里,并阅读答案......

选择100行或更多行,按F2,然后输入以下公式

=IFERROR(INDEX($B$1:$B$5,SMALL(IF($A$1:$A$5="Y",ROW($A$1:$A$5),""),ROW())),"")

然后按“Ctrl + Shift + Enter”。 使用myrange为100个或更多单元格定义名称管理器的范围名称。

选择E1单元格,在数据验证中写下列表的公式:

=OFFSET(D1;0;0;MATCH("";myrange;0)-1;1)