MS Excel的条件数据validation

我阅读了一些帮助进行条件(或dynamic)数据validation的教程,但是它通常是基于之前的selectdynamic生成列表项select等。

我想要的是,让我说我有

columnA : columnB telephone_number : 911 name: peterparker 

是否有可能根据columnA中select的内容dynamic指定columnB上的数据validation规则? 如果它的telephone_number,我想检查列B中的相应的单元格是一个自然数,如果它是一个名字,我想检查一个string一定的长度。 当然我限制了用户可以在columnA中input的string选项。

数据validation的替代方法是条件格式化 。 后者的好处是它更通用。 我们可以有以下设置:

在这里输入图像说明

那么如果我们定义一个名字DynamicValidation ,如下所示:

在这里输入图像说明

validation框中的公式是

 =EVALUATE(SUBSTITUTE(VLOOKUP(Sheet1!$A2,Sheet1!$D$2:$E$3,2,0),"()","("&ADDRESS(ROW(),2)&")")) 

EVALUATE不能在任何工作表单元中使用, 可用于命名范围。 但是,您必须将自己的图书保存为启用macros,因为它是源自Excel 4.0的遗留macros。 它做的是以下几点:

  • 查看List1中的值并find需要检查的公式( VLOOKUP )。
  • 用感兴趣的单元格值replace"()" (并加回括号)。

然后,如果您打开一个条件格式框( Home选项卡, Conditional FormattingNew RuleUse a formula to determine.... ),并input公式=Not(DynamicValidation)像这样:

在这里输入图像说明

那么每个不符合公式的单元格将变成红色。 我也试着用数据validation,但它不工作,除非我们每次更改List 2构builddepencency树..我不知道为什么..但只有条件格式工作:)下面是一些截图:

在这里输入图像说明

在这里输入图像说明

好处是我们可以改变validation标准而不用硬编码。 我希望这有帮助!

以下公式自定义validation规则将做到:

 =IF(A1="telephone_number";ISNUMBER(B1);IF(A1="name";LEN(B1)=8;TRUE)) 

这是B1单元格的示例。 你可以select更广泛的范围和结合$来适应你所有的范围。