Excel 无法从URL提取ID
我正在尝试拆分一些url,以获得位于每个url最右边部分的ID。在其他语言中,有反向索引选项,如[-1]中分割最后一部分。然而,我很难在vba中找到任何这样的选项来完成这个任务。请考虑这个尝试SPLITLIN CHAND,/1作为占位符。< /P> 如何获取位于不同URL最右边部分的ID 我迄今为止的努力:Excel 无法从URL提取ID,excel,vba,split,Excel,Vba,Split,我正在尝试拆分一些url,以获得位于每个url最右边部分的ID。在其他语言中,有反向索引选项,如[-1]中分割最后一部分。然而,我很难在vba中找到任何这样的选项来完成这个任务。请考虑这个尝试SPLITLIN CHAND,/1作为占位符。< /P> 如何获取位于不同URL最右边部分的ID 我迄今为止的努力: Sub GetId() Dim linkId As Variant, linkList As Variant linkList = Array( _ "ht
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
Debug.Print Mid(linkId, InStrRev(linkId, "/") + 1)
后期脚本:ID的长度可能不总是相同。您需要最右边斜杠的索引。InStr可以得到从左边开始的字符索引,但是你需要的是InStrRev,来得到从右边开始的字符索引
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
使用该索引,Mid函数将获取所需的子字符串-此代码生成所需的输出:
206898
350689
760689
Debug.Print Mid(linkId, InStrRev(linkId, "/") + 1)
不需要拆分字符串和涉及数组操作,字符串函数可以本地处理
注意,For Each对于迭代对象集合是有效的。要迭代数组,请使用For循环以获得最佳性能
此外,使用字符串而不是变量可以避免隐式类型转换。因此,这应该更有效:
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
您需要最右边斜杠的索引。InStr可以得到从左边开始的字符索引,但是你需要的是InStrRev,来得到从右边开始的字符索引 使用该索引,Mid函数将获取所需的子字符串-此代码生成所需的输出:
206898
350689
760689
Debug.Print Mid(linkId, InStrRev(linkId, "/") + 1)
不需要拆分字符串和涉及数组操作,字符串函数可以本地处理
注意,For Each对于迭代对象集合是有效的。要迭代数组,请使用For循环以获得最佳性能
此外,使用字符串而不是变量可以避免隐式类型转换。因此,这应该更有效:
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
投你一票。这是我从未想到的众多功能之一。投票给你。这是我从未想到的众多函数之一。你的答案是我大多数时候更喜欢的@Mathieu Guindon。我希望我能接受这两个答案。顺便说一句,去斯普利斯特里弗塞林克好吗,/0?谢谢。@robots.txt如果您在之后将其反转回来应该可以工作,但为什么?您现在正在链接两个反向和一个拆分,它们都必须分配和创建新字符串。我希望这样做的可读性和效率都会降低。在你的小范围内,也许效率并不重要,但我仍然不推荐这条路线。你的答案是我大多数时候更喜欢的@Mathieu Guindon。我希望我能接受这两个答案。顺便说一句,去斯普利斯特里弗塞林克好吗,/0?谢谢。@robots.txt如果您在之后将其反转回来应该可以工作,但为什么?您现在正在链接两个反向和一个拆分,它们都必须分配和创建新字符串。我希望这样做的可读性和效率都会降低。在你的小范围内,也许效率无关紧要,但我还是不推荐这条路线。