Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 无法从URL提取ID_Excel_Vba_Split - Fatal编程技术网

Excel 无法从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

我正在尝试拆分一些url,以获得位于每个url最右边部分的ID。在其他语言中,有反向索引选项,如[-1]中分割最后一部分。然而,我很难在vba中找到任何这样的选项来完成这个任务。请考虑这个尝试SPLITLIN CHAND,/1作为占位符。< /P> 如何获取位于不同URL最右边部分的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
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如果您在之后将其反转回来应该可以工作,但为什么?您现在正在链接两个反向和一个拆分,它们都必须分配和创建新字符串。我希望这样做的可读性和效率都会降低。在你的小范围内,也许效率无关紧要,但我还是不推荐这条路线。