如何从单元格中不同长度的字符串中分割字符?

时间:2019-01-03 15:57:12

标签: excel vba

我正在尝试从以下字符串中分割字符:

  

135 / GB 102主(DA)/机架1 /机架1 / RckShlf 2 / Bx 2 / Pos35

Sub SplitString()

    Dim c As Range
    For Each c In Range("N3:N6")
        Debug.Print Split(c, "/")(6)
        Debug.Print Split(c, "/")(5)
        Debug.Print Split(c, "/")(4)
        Debug.Print Split(c, "/")(3)
        Debug.Print Split(c, "/")(2)
        Debug.Print Split(c, "/")(1)
    Next c

End Sub

理想情况下,我只想在每个“ /”之间隔离数字字符,但是如果能够在“ /”之间拆分所有字符,这将节省大量时间。

2 个答案:

答案 0 :(得分:1)

我认为您最好遍历整个字符串,而不是将其分成多个部分,然后尝试在每个部分中查找数字。

考虑以下代码:

Sub SplitString()
    Dim c As Range
    Dim Counter As Integer

    For Each c In Range("N3:N6")
        Dim Section As String

        For Counter = 1 To Len(c)
            Dim s As String

            s = Mid(c, Counter, 1)

            If IsNumeric(s) Then
                Section = Section + s
            ElseIf (s = "/") Then
                Debug.Print Section
                Section = ""
            End If
        Next

        Debug.Print Section
        Section = ""
    Next c
End Sub

这将遍历您的范围,并创建一个包含每个部分中所有数字的字符串,然后在该部分结束时(找到Debug.Print时将/)。

上面的输出将是:

135
102
1
1
2
2
35

如果您需要以相反的顺序遍历字符串,则将计数器从Len(c)更改为1

答案 1 :(得分:1)

您可以使用正则表达式提取数字。既然您没有提到,您需要以哪种方式获得结果,因此我假设这是一个数组:

Function GetNums(s)
    Dim arr(), m, mc, x
    With CreateObject("VBScript.RegExp")
        .Global = True: .Pattern = "\d+"
        Set mc = .Execute(s)
        If mc.Count > 0 Then
            For Each m In mc
                x = x + 1: ReDim Preserve arr(1 To x)
                arr(x) = m.Value
            Next
        End If
    End With
    GetNums = arr
End Function

Sub test()
    Dim s, z, x
    s = "135/GB 102 Main (DA)/Shelf 1/Rack 1/RckShlf 2/Bx 2/Pos35"
    z = GetNums(s)
    For x = 1 To UBound(z): Debug.Print z(x): Next
End Sub

' Output:
' 102
' 1
' 1
' 2
' 2
' 35