【问题标题】:Excel VBA replace with function but leave numbersExcel VBA用函数替换但留下数字
【发布时间】:2020-12-09 21:39:20
【问题描述】:

我想用 +XX (XX) XXX XX XX 格式的相同号码替换 +XX-XX-XXX XX XX 格式的电话号码。我有一个几乎可以工作的查找/替换 makro:

        Cells.Find(What:="+??-??-", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Cells.Replace What:="+??-??-", Replacement:="+?? (??) ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

现在的问题是数字变成了这种格式:+?? (??) XXX XX XX。 VBA 中有没有办法说我想用这种格式替换它,但保留这些空格(+XX 和 (XX) 原样?因为我这样做的方式只是用我在替换中定义的完全替换所有内容: . 或者也许有一种方法可以暂时将数字保存在 ??通配符是并将它们重新添加到 Replacement: 部分?

如果有人可以帮助一个菜鸟,那就太酷了

【问题讨论】:

    标签: excel vba replace ms-office


    【解决方案1】:

    只是为了好玩,这里有一个工作表函数:

    =TEXT(SUM(IF(ISNUMBER(1/(MID(A1,SEQUENCE(20),1)+1)),MID(A1,SEQUENCE(20),1)*10^MMULT(-(SEQUENCE(20)<TRANSPOSE(SEQUENCE(20))),-ISNUMBER(1/(MID(A1,SEQUENCE(20),1)+1))))),"+00 (00) 000 00 00")
    

    该函数首先从字符串中删除所有非数字,然后使用TEXT 函数格式化结果数字。

    如果您有旧版本的 excel 并且没有 SEQUENCE 函数,您可以创建一个命名公式来代替生成类似的数字数组。将SEQUENCE(20) 替换为seq 在哪里

    seq Refers To:  =ROW(INDEX($A:$A,1,1):INDEX($A:$A,20,1))
    

    您可以在 VBA 中使用类似的算法,首先删除所有非数字,然后使用 vba Format 函数创建格式化字符串。

    【讨论】:

      【解决方案2】:

      请试试这个方法:

       Dim x As String, y As String, ar As Variant
        x = "+XX-XX-XXX XX XX"
        ar = Split(x, "-")
        y = ar(0) & " (" & ar(1) & ") " & ar(2)
        MsgBox y
      

      【讨论】:

      • 完美而完整的答案 :+) - 如果存在具有相同分隔符 "-" 的其他数组标记的假设反射,那么您可以通过第三个参数 ar = Split(x, "-", 3) 将标记的数量限制为三个并替换分隔符(s) 仅限ar(2)
      • @T.M.:是的,我有时会使用第三个 (limit) 参数,但现在情况并非如此......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多