我正在尝试拆分一些网址,以使ID位于每个网址的最右侧。在其他语言中,有反向索引选项,如[-1]
中所示,用于拆分最后一部分。但是,我正在努力寻找vba中的任何此类选项来实现此目的。请将此尝试Split(linkId, "/")(1)
视为占位符。
如何获取位于不同网址最右边的ID?
到目前为止我的尝试:
Sub GetId()
Dim linkId As Variant, linkList As Variant
linkList = Array( _
"https://etc.com/en/category/all/all/shops/206898", _
"https://etc.com/ar/category/all/mobile/350689", _
"https://etc.com/bn/category/all/bike/760689" _
)
For Each linkId In linkList
Debug.Print Split(linkId, "/")(1)
Next linkId
End Sub
预期输出:
206898
350689
760689
后记脚本:id可能不一定总是相同长度。
答案 0 :(得分:4)
您想要最右斜杠的索引。 InStr
可以使您从左开始的字符索引,但是您想要的是InStrRev
,可以使从右开始的字符索引。
Mid
函数使用该索引为您提供所需的子字符串-此代码产生所需的输出:
Debug.Print Mid(linkId, InStrRev(linkId, "/") + 1)
无需Split
字符串并不需要进行数组操作,字符串函数可以原生处理该字符串。
请注意,For Each
对于迭代对象集合非常有效。要迭代数组,请使用For
循环以获得最佳性能 [Source] 。
此外,使用String
而不是Variant
可以避免隐式类型转换。因此,这应该更有效:
Sub GetId()
Dim linkList As Variant
linkList = Array( _
"https://etc.com/en/category/all/all/shops/206898", _
"https://etc.com/ar/category/all/mobile/350689", _
"https://etc.com/bn/category/all/bike/760689" _
)
Dim current As Long, link As String
For current = LBound(linkList) To UBound(linkList)
link = linkList(current)
Debug.Print Mid$(link, InStrRev(link, "/") + 1)
Next
End Sub
答案 1 :(得分:3)
Sub GetId()
Dim linkId As Variant, linkList As Variant, v As Variant
linkList = Array( _
"https://etc.com/en/category/all/all/shops/206898", _
"https://etc.com/ar/category/all/mobile/350689", _
"https://etc.com/bn/category/all/bike/760689" _
)
For Each linkId In linkList
v = Split(linkId, "/")
Debug.Print v(UBound(v))
Next linkId
End Sub