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

时间:2017-10-20 18:56:34

标签: excel vba excel-vba

我正在寻找一个可以根据字符“ - ”拆分文本的宏。我有一些类似于产品ID的东西,这些产品ID是由许多用“ - ”分隔的。这些作品的长度并不总是相同,但我总是有相同的数量(总是有四个“ - ”)。

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

02-AAAA-MBD-98-2a。

作为输出,我希望在separeted单元格中有02,aaaa,mbd,98和2a

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

将功能拆分为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具有所需的输入时,您可以在单元格=EXTRACTELEMENT($A$1;1;"-")上使用B1功能,在单元格=EXTRACTELEMENT($A$1;2;"-")上使用C1,依此类推。

结果:

Result 1

正则表达式

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的图像相同。

  

请记住enable the reference

答案 1 :(得分:0)

查看link以获取拆分文本到列的帮助,如果您想要一个宏,只需使用&#34;记录宏&#34;

答案 2 :(得分:0)

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

more information here