在Excel中基于特殊字符的文本分割

我正在寻找一个可以根据字符“ – ”分割文本的macros。 我有许多产品ID用“ – ”分隔。 这些作品并不总是相同的长度,但我总是有相同的数量(总是有四个“ – ”)。

此ID在一个单元格中,如下所示:

02-AAAA-MBD-98-2a。

作为一个输出,我想有02,aaaa,mbd,98和2a分离单元格

您可以使用以下内容:

拆分函数作为UDF

Function EXTRACTELEMENT(Txt As String, n, Separator As String) As String On Error GoTo ErrHandler: EXTRACTELEMENT = Split(Application.Trim(Mid(Txt, 1)), Separator)(n - 1) Exit Function ErrHandler: ' error handling code MsgBox "Error, verify the input data." EXTRACTELEMENT = CVErr(xlErrNA) On Error GoTo 0 End Function 

当单元格A1具有所需的input时,使用单元格B1上的函数=EXTRACTELEMENT($A$1;1;"-")和单元格C1上的=EXTRACTELEMENT($A$1;2;"-")等等。

结果:

结果1

正则expression式

Regex101和列A上的值的代码:

 Dim str As String Dim objMatches As Object lastrow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastrow str = Cells(i, "A") Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp objRegExp.Pattern = "[\d\w]+?(?=\-|$)" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) If objMatches.Count <> 0 Then k = 2 For Each m In objMatches Cells(i, k) = m.Value k = k + 1 Next End If Next i 

结果与使用UDF相同。

记得启用参考

查看链接帮助拆分文本到列,如果你想要这个macros,只需使用“loggingmacros”

 Split("02-aaaa-mbd-98-2a", "-") //will five you {02,aaaa,mbd,98,2a} 

更多信息在这里