我有一列值可以是数字,字母,字符或两者。 我需要按照以下规则将该列筛选到新列中:
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
答案 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倍。如果存在无关字符,则不会删除它们,因此总和将超过阈值。