在数据验证中使用“ IF”语句和空白单元格的问题

时间:2019-01-09 21:01:55

标签: excel excel-formula

我有两个下拉菜单,其中第一个确定第二个显示的选项。我希望这样做,以便在第一个下拉菜单中均未选择任何内容时,您不能在第二个下拉菜单中输入任何内容。

我正在处理一个交互式表格,该表格将在工作中使用,其中有一个产品系列的下拉菜单(A1),然后在那里的选择驱动了另一个下拉菜单(A2),该菜单显示该给定系列的产品

为此,我们使用了三个表(带有模拟数据): 产品家族(水果和蔬菜) 水果(第1列包含水果列表,第2列包含价格) 蔬菜(第1列包含蔬菜列表,第2列包含价格)。

我和我的同事正在努力尝试破坏表格,我们发现,如果在A1中没有选择ProductFamily,我们可以在A2中键入我们想要的任何内容而不会出现验证错误,这样做之后,我们甚至可以选择一个产品家庭,在我们的非标准输入中仍然没有提示问题。

为了解决这个问题,我创建了第四个表,称为Null。它只有一个单元格,它是=""

要对此进行测试,然后将“数据验证”设置为“列表”,其中“源”为=INDIRECT(IF(ISBLANK(A1),"Null","Fruit[Column1]"))。这样,我发现如果A1为空白,我仍然可以键入A2,但是如果A1不为空白,则无法键入。我换了个头寸,所以公式为:=INDIRECT(IF(ISBLANK(A1),"Fruit[Column1]","Null")),发现当A1为空白时我可以看到水果清单时,我仍然可以键入所需的内容。当A1不为空时,我只有""选项,键入的任何内容都会提示错误。

注意:我确实尝试了=INDIRECT(IF(condition,"True","False")语法和=IF(condition,INDIRECT("True"),INDIRECT("False")语法,但发现(按预期)行为没有差异。

我不知道为什么IF语句的True部分的行为如此,但是我终于尝试了, =INDIRECT(IF(ISBLANK(A1),IF(ISBLANK(A1)=FALSE,,"Null"),"Fruit[Column1]"))并发现将"Null"强制设置为错误条件使其可以工作,因此,如果我在A1为空白时在A2中键入任何内容,则会产生错误。

最终版本是

=INDIRECT(IF(ISBLANK(A1),IF(ISBLANK(A1)=FALSE,,"Null"),A1 & "[Column1]"))

除了深入研究VBA之外,真的没有其他方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

验证空白可能有些变幻无常。动态验证中的空白更是如此。

似乎“数据验证”对话框中的“忽略空白”选项不仅适用于应用验证的字段,而且还适用于验证计算中使用的源字段。如果您只是取消选中“忽略空白”,则应该能够使用一种更简单,更直观的验证公式。

在我的示例中,我将一个空单元格命名为“空白”以简化验证公式:

=IF(A1="",Blank,INDIRECT("Fruit[Column1]"))

如果A1为空白,尝试在A2中键入任何内容,则会出现错误。

(这引入了一个小问题,即在编辑模式下无法清除A2,即无法进入编辑模式,删除所有文本,然后按Enter进行确认。您需要退出单元格,然后点击删除以清除所有内容,这样您就可以绕过不允许空白的验证。)