我在excel中有一个成员表,其中包含一个手机号码列,我需要输出手机号码无效的成员(少于/多于10位)。
有人能建议这样做的最好方法吗?
是否有公式来计算单元格中的位数?
答案 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