使用IF()和Len()进行自定义验证

时间:2013-05-21 03:18:46

标签: excel validation excel-formula

我制作了自定义手机格式### - ### - ####,因此只能输入手机号码5555555555 => 555-555-5555或555-555-55555。

我需要一个非vba解决方案,即我可以在数据验证窗口中输入一个检查单元长度并在长度为10或12时验证它。

我已经尝试了很长时间但是无法通过反复试验或谷歌搜索来获取它。

我最好的猜测是(这不起作用)

=IF((LEN(E2:E32)=12,0),( LEN(E2:E32)=10,0))

由于

1 个答案:

答案 0 :(得分:3)

这并不容易,因为Excel没有内置模式匹配功能 - 您只能在验证检查中使用内置函数。

虽然有解决方案!

幸运的是,您可以根据依赖单元格的状态检查验证。这就是我们在这里采取的方法。

1)你的第一份工作是将电话号码格式化为文本(我的功能假设你已经这样做了)所以Excel不会修剪前导零。实际上,您可以通过这种方式格式化整个列。我们假设单元格A1将包含电话号码。

2)如果你试图将它放在一个单元格中并且难以维护,验证公式将会非常大。我们要做的是将验证内容放在“电子表格”之外;即在通常对用户不可见的列中。也就是说,为清晰起见,我们将使用B,C和D列。 (一旦完成,只需在其他地方剪切并粘贴它们。)

3)在B1放=OR(C1,D1)

4)在C1放=IFERROR(IF(LEN(A1)=10,VALUE(A1)*0 + 1,FALSE),FALSE)。这样可以验证没有破折号的格式。

5)在D1中放=IFERROR(IF(OR(LEN(A1)=12,LEN(A1)=13),IF(AND(MID(A1,4,1)="-",MID(A1,8,1)="-"),VALUE(LEFT(A1,3) & MID(A1,5,3) & MID(A1,9,32767)) * 0 + 1,FALSE),FALSE),FALSE)。这将使用破折号验证格式。

我正在使用的三个技巧是(i)IFERROR用于写入False,否则结果将是#VALUE。这允许我在编程中更加粗糙,并且(ii)如果n是数字,则VALUE(n)* 0 + 1模式返回1,并且如果n不是,则方便地计算#VALUE并将其委托给周围函数一个号码。最后(iii)MID函数中的32767允许我们比较字符串中的剩余字符,而不必使用更笨拙的RIGHT表达式。 32767是单元格中字符数的限制。也许我在这里一个人;由于这一点没有请求投票; - )

6)最后,对于单元格A1,选择自定义验证并设置= B1作为验证公式。

就是这样!它会通过你所有的三种格式:

5555555555,555-555-5555或555-555-55555,其中您使用了5作为通配符。