使Excel公式将字符串视为正则表达式

时间:2014-05-28 15:21:24

标签: regex excel excel-vba vba

在我的Excel工作簿中,出现了很多00XX,其中X可以是任何数字。例如,0017经常出现。我想使用00XX函数删除所有出现的SUBSTITUTE。到目前为止,我有这个:

=SUBSTITUTE(C1,"00[0-9][0-9]","")

这不起作用,我认为这是因为Excel将第二个字符串视为文字,而不是正则表达式。有没有办法让这个配方有效?我知道有些编程语言允许你在字符串中添加修饰符来改变它的含义,但是我还没有找到任何这样的东西用于Excel。

3 个答案:

答案 0 :(得分:0)

此解决方案不使用 VBA

选择一个未使用的列,例如 K

K1 中输入:

="00" & TEXT(ROW()-1,"00")

将其从 K2 通过 K100 复制下来。这是所有可能的"不受欢迎的"子串。

使用 A1 中的原始数据,在 B1 中输入数组公式:

=IFERROR(TRIM(SUBSTITUTE(A1,INDEX(K1:K100,MATCH(1,COUNTIF(A1,"*"&K1:K100&"*"),0)),"")),A1)
必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter key。

如果 A1 包含:

t0078yetryet

B1 会显示:

tyetryet

答案 1 :(得分:0)

为什么不简单地利用SEARCH函数接受通配符的事实?

=REPLACE(A1,LOOKUP(2^15,FIND(TEXT(ROW(INDEX(A:A,1):INDEX(A:A,99)),"0000"),A1)),4‌​,"")

请注意,到目前为止提出的两个解决方案都不会在给定字符串上替换多次出现的同时

此致

答案 2 :(得分:0)

  1. 使用MoreFunc插件(网站链接似乎是粗略的
  2. 下面是
  3. VBA UDF,请使用=CleanString(A1)
  4. 测试

    Sub TestDaCode()
    MsgBox CleanString("0018 2450 00notme 0017")    
    End Sub
    

    UDF

    Function CleanString(strIn As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .Pattern = "00\d{2}"
        CleanString = .Replace(strIn, vbNullString)
    End With
    End Function