这里的背景是我正在尝试识别大杂乱列的电话号码模式,并将其格式化为:
(CC)NNNN-NNNN
CC是两位数的区号
同一个单元格中可能有两个或更多个数字(不幸的是,它们需要保留在同一个单元格中),需要如下:
(CC)NNNN-NNNN /(CC)NNNN-NNNN
这些数字只是原始数字,没有空格或字符,但是作为TEXT,由于Excel上的15位数限制需要保留这些数字
现在,我遇到了两个案例的问题
案例1:
两部电话和一个区号(18位)
示例:CCNNNNNNNNNNNNNNNN
我需要的是一个函数,它从该字符串中获取前两个字符并将其添加到所述字符串的第11个字符处,从而产生20个字符串
案例2:
一部电话和两部相同的区号(12位)
CCCCNNNNNNNN
这个只需删除前两个字符
对于案例1尝试过这种方式,但结果却是一个22字符串的字符?不确定我哪里出错了
s1 = Mid(Cells(j, 3), 1, 2)
s2 = Mid(Cells(j, 3), 3, 10)
s3 = Mid(Cells(j, 3), 11, 18)
s4 = s1 & s2 & s1 & s3
答案 0 :(得分:0)
这里最大的警告是现有数据的格式化......你怎么知道什么是数字"区号"什么数字是电话号码?您可以使用Excel公式在没有任何VBA的情况下执行您要执行的操作...对于案例1,您可以使用下面的公式,替换" A1"使用适当的单元格引用。
="("&MID(A1, 1, 2)&") "&mid(A1,3,4)&"-"&mid(a1,7,4)&" / ("&MID(A1, 1, 2)&") "&mid(A1,11,4)&"-"&mid(a1,15,4)
对于案例2,您可以使用以下公式。
="("&MID(A1, 1, 2)&") "&mid(A1,5,4)&"-"&mid(a1,9,4)
您的解决方案 是否在vba中?
答案 1 :(得分:0)
Mid
中的第三个参数是提取的子字符串的长度,而不是其最终索引。如果省略 - 选择将转到字符串的末尾。如果length参数超过可能的字符数,则选择也将转到字符串的末尾。因此,s2 = Mid(Cells(j, 3), 3, 10)
的长度为10
而不是预期的8
。你的案例1看起来像这样:
Sub test()
Dim s As String, t As String
s = "CCNNNNNNNNNNNNNNNN"
t = Mid(s, 1, 10) & Mid(s, 1, 2) & Mid(s, 11)
Debug.Print t
End Sub
哪个有输出:
CCNNNNNNNNCCNNNNNNNN
答案 2 :(得分:0)
对于你的两个案例:
=IF(LEN(A1)=18,REPLACE(A1,11,0,LEFT(A1,2)),IF(LEN(A1)=12,MID(A1,3,10)))
不了解其他格式或所需结果,很难扩展公式。如果长度不是12或18,公式将返回FALSE
。