无法从网址提取ID

时间:2019-02-14 18:30:31

标签: excel vba split

我正在尝试拆分一些网址,以使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可能不一定总是相同长度。

2 个答案:

答案 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