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

我制作了一个自定义的手机格式### – ### – ####,这样一个手机号只能input5555555555 => 555-555-5555或555-555-55555。

我需要一个非VBA的解决scheme,即我可以进入数据validation窗口,检查单元格的长度,并validation它,如果长度是10或12。

我一直在尝试很长时间,但无法通过反复试验或使用Googlesearch来获得。

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

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

谢谢

这并不容易,因为Excel没有内置的模式匹配function – 您只能在validation检查中使用内置函数。

有一个解决scheme虽然!

幸运的是,您可以根据相关单元的状态来检查validation。 这是我们将采取的方法。

1)你的第一份工作是将电话号码格式化为文本 (我的function假设你已经这样做了),所以Excel不会削减前导零。 在实践中,你会这样格式化整列。 我们假设单元格A1将包含电话号码。

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

3)B1 =OR(C1,D1)

4)在C1 put =IFERROR(IF(LEN(A1)=10,VALUE(A1)*0 + 1,FALSE),FALSE) 。 这validation了没有破折号的格式。

5)在D1 put =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) 。 这validation了与破折号的格式。

我使用的三个技巧是(i)如果结果否则为#VALUE,IFERROR用于写入False。 (ii)如果n是数字,则VALUE(n)* 0 + 1模式返回1,并且如果n不是,则计算#VALUE并将其委托给周围的函数一个号码。 最后(iii)MID函数中的32767允许我们比较string中的其余字符,而不必使用更笨拙的RIGHTexpression式。 32767是单元格中字符数量的限制。 也许我在这里1 没有downvotes由于这个请;-)

6)最后,对于单元格A1,select自定义validation并将set = B1作为validation公式。

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

5555555555,555-555-5555或555-555-55555其中您已经使用5作为通配符数字。