如何在Excel中使用正则表达式?

时间:2013-10-08 22:32:30

标签: regex excel-vba vba excel

我有一列值可以是数字,字母,字符或两者。 我需要按照以下规则将该列筛选到新列中:

1)如果一个单元格包含数字,则连接“89”

2)如果单元格包含数字和连字符,请修剪连字符并连接89

3)如果单元格包含字母或其他规格字符,请说出字符串

column    resultingColumn
1234      123489
12-34hk   string
&23412    string
99-9      99989
34-4      34489

我试过但它并不像看起来那么容易

Function SC(strIn As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
     With objRegex
     //i am not sure how to list the rules here
    .ignorecase = True
    SC = .Replace(strIn, vbNullString)
    End With
    End Function

2 个答案:

答案 0 :(得分:2)

您不需要正则表达式。考虑:

Function aleksei(vIn As Variant) As Variant
    Dim z As Variant
    z = Replace(vIn, "-", "")
    If IsNumeric(z) Then
        aleksei = z & "89"
    Else
        aleksei = "string"
    End If
End Function

编辑#1:

根据Nirk的评论,如果要将小数点作为“数字”的一部分排除,请改用:

Function aleksei(vIn As Variant) As Variant
    Dim z As Variant, zz As Variant
    z = Replace(vIn, "-", "")
    zz = Replace(z, ".", "A")
    If IsNumeric(zz) Then
        aleksei = z & "89"
    Else
        aleksei = "string"
    End If
End Function

答案 1 :(得分:1)

您不需要正则表达式甚至VBA:将B2设置为以下公式并填写:

 =IF(SUM(LEN(SUBSTITUTE(A2,{1,2,3,4,5,6,7,8,9,0,"-"},"")))-10*LEN(A2)=0,SUBSTITUTE(A2,"-","")&"89","string")

如果我们从文本中删除班级[0-9\-]中的每个字符,它的作用是计算长度。如果没有其他字符,那么我们将删除每个字符一次,因此字符串的总长度是原始字符串的10倍。如果存在无关字符,则不会删除它们,因此总和将超过阈值。