【问题标题】:Extract and add sub strings into strings提取子字符串并将其添加到字符串中
【发布时间】:2016-05-18 03:43:01
【问题描述】:

这里的上下文是我正在尝试识别一个大杂乱列的电话号码模式,并将它们格式化为:

(CC) NNNN-NNNN

CC 是两位数的区号

同一个单元格中可能有两个或多个数字(不幸的是它们需要留在同一个单元格中),并且需要如下:

(CC) NNNN-NNNN / (CC) NNNN-NNNN

这些数字只是原始数字,没有空格或字符,但由于 Excel 上的 15 位限制,因此需要保持为 TEXT 格式

现在,我遇到了两个问题

案例一:

两部电话和一个区号(18 位)

示例:CCNNNNNNNNNNNNNNNN

我需要一个函数,从该字符串中获取前两个字符并将它们添加到所述字符串的第十一个位置,从而生成一个 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

【问题讨论】:

  • “我有两个案例有问题” - 有什么问题?您使用的是哪种编程语言?你试过什么?
  • 抱歉,忘记添加正确的标签
  • 为什么这被标记为 VBA?我在您的问题中没有看到 VBA 代码。
  • 这似乎非常简单(使用Mid 提取和& 连接)。你试过什么?
  • @JohnColeman 试了你说的,出乎意料的结果,编辑了答案

标签: string excel vba


【解决方案1】:

这里最大的警告是现有数据的格式......您如何知道哪些数字是“区号”以及哪些数字是电话号码?您可以在没有任何 VBA 的情况下使用 Excel 公式执行您想要执行的操作...对于案例 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 中吗?

【讨论】:

    【解决方案2】:

    Mid 中的第三个参数是提取的子字符串的长度,而不是它的最终索引。如果省略 - 选择将转到字符串的末尾。如果长度参数超过可能的字符数,则选择也会转到字符串的末尾。因此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
    

    【讨论】:

      【解决方案3】:

      对于你的两种情况:

      =IF(LEN(A1)=18,REPLACE(A1,11,0,LEFT(A1,2)),IF(LEN(A1)=12,MID(A1,3,10)))
      

      不知道其他格式或期望的结果,很难扩展公式。如果长度不是 12 或 18,公式将返回 FALSE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 2014-05-26
        • 1970-01-01
        • 2015-10-27
        相关资源
        最近更新 更多