使用VBAparsing和拆分通配符的string?

我有一张包含字母数字字符的项目号码和一排其他信息的行。 有时,类似的项目被合并成一行,项目号码上的差异将以(X / Y)显示,以select在该项目号码中当时使用哪个字符(不仅是X或Y,可以是任何字母数字字符)。 换句话说,这些条目将如下所示:

AB(X / Y)CD123

我需要的是将其分成两个项目号ABXCD123和ABYCD123的方法。 之后,我将不得不在当前行下创build一行,并将当前行复制到其中,并更改项目编号,但该部分很简单。 我已经尝试使用InStr来获取(X / Y)标记,但我不知道如何拉出X和Y字符,使他们与新的string。 我也不知道通配符是否适用于InStr,而且我对RegEx也不太熟悉。

有任何想法吗?

这里是对UDF²的正则expression式¹的一点介绍。

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 = "\([AZ]{1}/[AZ]{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) 

partnums

这里是一个大部分重复的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 = "\([AZ]{1,3}/[AZ]{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 

在这里输入图像说明


¹ 正则expression式问题通常可以通过如何在Microsoft Excel中使用正则expression式(正则expression式)in-cell和loops中的解决scheme来解决。

² 用户自定义函数(aka UDF)被放入标准的模块代码表中。 点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块Alt + IM )。 将function代码粘贴到名为Book1 – Module1(Code)的新模块代码表中。 点击Alt + Q返回到您的工作表。