我想清理我的电话号码数据。公式
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E2,"(",""),")",""),"-","")," ",""),".","")+0
完成部分工作。但我还想加入一条IF()
语句,如果长度小于 11 且开头没有 0,则添加前导 0。号码可以是固定电话或手机,但我认为主要问题是缺少 0 和空格。请参阅下面的数据示例:
7523698745
7896541236
1235552207
07841 256321
01235552204
7845 213698
07845632158
01235552204
谢谢。
答案1
从您的问题来看,您似乎试图遍历一个包含不同特殊字符的电话号码,并提取电话号码的整数。例如,该号码(123) 456-7890
应返回01234567890
。
尝试以下用户定义函数(UDF 的解释)
Function PARSEPHONENO(number As String) 'Number is the selected cell
Application.Volatile 'The formula will recalculate itself
Dim answer As String 'The value returned from the function
Dim i As Integer 'Used to loop through each character of the selected 'number' String
For i = 1 To Len(number) 'For each character of the cell from 1 to the lenght of the string
If IsNumeric(Mid(number, i, 1)) Then answer = answer & Mid(number, i, 1) 'If the value if numberic then add it to the answer
Next i 'Next Character
If Len(answer) < 11 And Left(answer, 1) <> "0" Then answer = "0" & answer 'If the answer is less than 11 digits, add a zero to the beginning of the cell
PARSEPHONENO = answer 'Return the answer
End Function
注意:该公式将返回一个字符串值,其中的数字以前导 0 为单位显示在单元格中。
希望这可以帮助!
答案2
答案3
您当前的公式通过添加 强制将结果变为数字0
。因为结果是一个数字,Excel 会删除所有前导零,因此检查零是没有意义的。下表的 B:E 列显示了这一点。
A 列是样本数据,B 列是公式的结果,D 列是公式末尾不带 的结果+0
。C、E、G 和 I 列使用 来显示其左侧单元格的第一个字符=LEFT(cell,1)
。
您可以使用一些技巧让 Excel 显示前导零。F 列与 B 列相同,只是自定义格式为"0"#
。这显示器前导零,即使它们实际上并不存在,如 G 列所示。
H 列使用此公式
=IF(LEN(B2)=10,0&B2,B2)
它给出了文本结果,但有真正的前导零。
因此,如何处理此问题取决于您是否需要将数据存储为数字还是文本。