提取子字符串并将其添加到字符串中

时间:2016-05-17 18:14:08

标签: string excel excel-vba vba

这里的背景是我正在尝试识别大杂乱列的电话号码模式,并将其格式化为:

(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

3 个答案:

答案 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