Как разделить символы из строки различной длины в ячейке? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь разделить символы из следующей строки:

135 / GB 102 Main (DA) / Shelf 1 / Rack 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 голосов
/ 03 января 2019

Вы можете извлечь числа с регулярным выражением. Поскольку вы не упомянули, каким образом вам нужно получить результат, я предполагаю, что это массив:

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
0 голосов
/ 03 января 2019

Я думаю, что вам лучше пройти всю строку, чем разбивать ее на части, а затем пытаться найти числа в каждом разделе.

Рассмотрим следующий код:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...