在excel中的特殊字符(“|”)之后提取前四个字符

时间:2015-06-15 13:18:48

标签: excel excel-vba vba

我在单元格中有以下内容

0001 abc | 0002 eXtreme Scale | 0003基础设施部。 no。| 0004集成组件

我想只提取数字(0001,0002等)。有人可以帮忙吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

以下代码会将所有数字写入A列中从A1开始到底部的单元格:

Sub NextTest()

    Dim i As Integer
    Dim tmpArr As Variant
    Dim strTxt As String
        strTxt = "0001 abc|0002 eXtreme Scale|0003 Infrastructure dept. no.|0004 Integration Components"
        tmpArr = Split(strTxt, "|")

    For i = 1 To UBound(tmpArr)
        Cells(i, "A") = "'" & Left(tmpArr(i - 1), 4)
    Next i
End Sub

答案 1 :(得分:2)

您可以循环播放字符串

Dim strNumbers = left(cellcontent, 4)
Dim nPipeLoc = InStr(5, cellcontent, "|", Text)
While ( nPipeLoc > 0)
    strNumbers = strNumbers & "," & Mid(cellcontent, nPipeLoc, 4)
    nPipeLoc = InStr(nPipeLoc + 1, cellcontent, "|", Text)
End While

或者您可以使用RegEx

Dim strSearchRegex = "(?:^|\|)(\d{4})"

或@KazimierzJawor的解决方案,这更简单:)

答案 2 :(得分:0)

创建一个可以多种方式使用的功能。

插入模块并输入(复制/粘贴)此内容:

Public Function PipeNumberExtractor(CellValue As String) As String
    Dim PipeSplit() As String
    PipeSplit = Split(CellValue, "|")

    Dim PipeSplitItem As Variant
    Dim SpaceSplit() As String

    For Each PipeSplitItem In PipeSplit
        SpaceSplit = Split(PipeSplitItem, " ")
        If UBound(SpaceSplit) >= 0 Then
            PipeNumberExtractor = PipeNumberExtractor & "," & SpaceSplit(0)
        End If
    Next PipeSplitItem

    If Len(PipeNumberExtractor) > 0 Then
        PipeNumberExtractor = Mid(PipeNumberExtractor, 2)
    End If

End Function

' To test the function, let's do this    
Sub Test()
    Debug.Print PipeNumberExtractor("0001 abc|0002 eXtreme Scale|0003 Infrastructure dept. no.|0004 Integration Components")
End Sub

在Excel中,如果A1包含0001 abc|0002 eXtreme Scale|0003 Infrastructure dept. no.|0004 Integration Components,则在A2中您可以键入

=PipeNumberExtractor(A1)

你会得到

0001,0002,0003,0004