我有一张包含字母数字字符的项目编号的表格,以及该行中的一堆其他信息。有时,类似的项目组合成一行,项目编号的差异将显示为(X / Y),以选择在项目编号中的该点使用哪个字符(不只是X或Y,可以是任何字母数字字符)。换句话说,这些条目将如下所示:
AB(X / Y)CD123
我需要的是将其分成两个项目编号ABXCD123和ABYCD123的方法。之后,我必须在当前行之下创建一行,并使用更改的项目编号将当前行复制到其中,但该部分很容易。我曾尝试使用InStr来标记(X / Y),但我不知道如何拉出X和Y字符来制作新的字符串。我也不知道通配符是否适用于InStr,而且我对RegEx不太熟悉。
有什么想法吗?
答案 0 :(得分:3)
以下是对UDF²中正则表达式的一点介绍。
Function partNums(str As String, _
Optional num As Integer = 1)
Dim tmp As String
Static rgx As Object
'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
partNums = vbNullString
With rgx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "\([A-Z]{1}/[A-Z]{1}\)"
If .Test(str) Then
tmp = .Execute(str)(0)
Select Case num
Case 2
tmp = Mid(tmp, 4, 1)
Case Else
tmp = Mid(tmp, 2, 1)
End Select
partNums = .Replace(str, tmp)
End If
End With
End Function
在B2:B3中,
=partNums(A2)
=partNums(A3,2)
这是一个基本上重复的UDF,处理1到3个字符。
Function partNums(str As String, _
Optional num As Integer = 1)
Dim tmp As String
Static rgx As Object
'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
partNums = vbNullString
With rgx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "\([A-Z]{1,3}/[A-Z]{1,3}\)"
If .Test(str) Then
tmp = .Execute(str)(0)
tmp = Split(Replace(Replace(tmp, Chr(40), vbNullString), Chr(41), vbNullString), Chr(47))(num - 1)
partNums = .Replace(str, tmp)
End If
End With
End Function
¹ regex问题通常可以通过How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops中的解决方案来回答。
²用户定义函数(又名UDF)被放入标准模块代码表中。点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 我,中号)。将功能代码粘贴到标题为 Book1 - Module1(Code)的新模块代码表中。点击 Alt + Q 返回工作表。