0

我有一列可以是数字、字母、字符或两者的值。我需要使用以下规则将该列筛入一个新列:

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
4

2 回答 2

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
于 2013-10-08T23:07:28.437 回答
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 倍。如果有多余的字符,它们不会被删除,因此总和将超过阈值。

于 2013-10-09T01:31:45.490 回答