我正在尝试从以下字符串中分割字符:
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
理想情况下,我只想在每个“ /”之间隔离数字字符,但是如果能够在“ /”之间拆分所有字符,这将节省大量时间。
答案 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