在excel vba中获取文本之间的数据

在excel vba中获取文本之间的数据,excel,vba,excel-formula,Excel,Vba,Excel Formula,假设我有一个URL链接 (例如:) 我正在寻找一个代码,它搜索userLat=12.3456789 userLong=-98.7654321,结果只显示(12.3456789,-98.7654321)。vba或vba excel将有所帮助 我是vba的新手,所以请容忍我。谢谢 假设您的字符串(本例中为URL)格式始终遵循以下规则 您的纬度号介于userLat=和userLat=之后的第一个&之间 您的经度数字介于userLong=和userLong=之后的第一个&之间 你也可以用这个——

假设我有一个URL链接

(例如:)

我正在寻找一个代码,它搜索userLat=12.3456789 userLong=-98.7654321,结果只显示(12.3456789,-98.7654321)。vba或vba excel将有所帮助

我是vba的新手,所以请容忍我。谢谢

假设您的字符串(本例中为URL)格式始终遵循以下规则

  • 您的纬度号介于
    userLat=
    userLat=
    之后的第一个
    &
    之间
  • 您的经度数字介于
    userLong=
    userLong=
    之后的第一个
    &
    之间


你也可以用这个——同样的结果

Lat = Split(Split(Range("A1"), "userLat=")(1), "&")(0)
Lon = Split(Split(Range("A1"), "userLong=")(1), "&")(0)

Out = "(" & Lat & ", " & Lon & ")"

删除单元格
A1
中提供的链接将产生以下结果:


如果您有
过滤器xml
(windows excel 2013+),您可以使用

=MID(FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]"),1+FIND("=",FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]")),99)

每个感兴趣的链接的格式是否遵循这些规则
userLat=[number]&userLong=[number]&
一个示例不足以建立一个模式。共享更多示例URL。足以建立模式。如果模式中断,这里的大多数公式都会中断,因此了解规则在“?”上的拆分很重要,然后在“&”上拆分结果数组的第二部分将为您提供格式为“ParamName=ParamValue”的元素数组:你可以在上面循环找到你想要的。非常感谢你的快速回复@urderboy,太快了。我在excel中的命令按钮上尝试了这段代码,也在userform上尝试了这段代码,但是无法运行这段代码。我做错了什么,因为我是个十足的傻瓜。您的纬度号在userLat=和第一个&after userLat=之间。您的经度号在userLong=和第一个&after userLong=之间。这些条件都是真的。您可能对表单有不同的问题。我不擅长这些,所以这需要一个单独的问题。这回答了您的问题,因为它没有提到按钮/用户表单。这在Excel上非常有效,但我正在尝试vba用户表单类型。非常感谢你@Ron Rosendeldy您可以在VBA中使用相同的方法。但很明显,你的问题并没有勾勒出你真正的需求。我建议您阅读的帮助主题,以及。然后,最好提出一个新问题,并提供足够的信息,以便做出相关的回应。
=MID(FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]"),1+FIND("=",FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]")),99)
=TEXTJOIN(", ",,MID(FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]"),1+FIND("=",FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>") & "</s></t>","//s[contains(.,'userLat') or contains(.,'userLong')]")),99))