单元格中数字的有效性

时间:2015-09-30 12:03:13

标签: excel validation

我在excel中有一个成员表,其中包含一个手机号码列,我需要输出手机号码无效的成员(少于/多于10位)。

有人能建议这样做的最好方法吗?

是否有公式来计算单元格中的位数?

5 个答案:

答案 0 :(得分:1)

试试这个RegEx:

/(?:(?<= [+][1-9])|(?<= [1-9])|(?<= ))([2-9][0-9]{9})\b/gi

答案 1 :(得分:1)

Public Function IsValidPhone(xlCell as Range) as Boolean    
  If (xlCell.range Like "#[-.]###[-.]###[-.]###") OR
     (xlCell.range2 Like "#[-.]###[-.]###[-.]###") 
  Then
    IsValidPhone = True
  ELSE
    IsValidPhone = False
End Function

答案 2 :(得分:0)

=AND(ISNUMBER(A1),LEN(A1)=10)

这将测试单元格a1是否为数字且长度为10位数。 您可以将其向下拖动并过滤所有False。 如果您有其他有效字符,例如&#34; - &#34;然后将它们添加到您的OP中,我们也将处理它。

答案 3 :(得分:0)

在项目或全局 Module 中创建 VBA宏/功能。如果你没有,那么只需创建/添加一个(默认情况下它将被称为 Module1 - 没关系。)

然后创建以下功能。然后传递reg参数,例如"(?<!\S)(?:\+?1)?([2-9]\d{9})(?!\S)",执行以下操作:

(?<! \S )            //  Look behind, whitespace or ^   
(?: \+? 1 )?         //  Optional +1  
( [2-9] \d{9} )      //  (1), ten digit phone  
(?! \S )             //  Look ahead, whitespace or $
'// Executes a Regular Expression on a provided string 
'// and returns a selected submatch:
'//    `str` - string to execute the regex on
'//    `reg` - the regular expression with at least 1 capture '()'  
'//    `matchIndex` - the index of the match you want to return (default: 0)  
'//    `subMatchIndex` - the index of the submatch you want to return (default: 0)  
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function RegexExecute( _
  str As String, reg As String, Optional matchIndex As Long, _
  Optional subMatchIndex As Long _
) As String  

  On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = reg
    regex.Global = Not (matchIndex = 0 And subMatchIndex = 0) '//For efficiency
    If regex.test(str) Then
      Set matches = regex.Execute(str)
      RegexExecute = matches(matchIndex).SubMatches(subMatchIndex)
      Exit Function
    End If 

  ErrHandl:
    RegexExecute = CVErr(xlErrValue) 
End Function

答案 4 :(得分:0)

非VBA公式解决方案,忽略电话号码格式并获取单元格中的位数:

=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(A1,{1,2,3,4,5,6,7,8,9,0},"")))

例如,它将在以下所有方面成功运行:

1234567890
123-456-7890
(123)4567890
(123) 456-7890
123.456.7890
123 456 7890