【问题标题】:Find URL in cell/string with Excel VBA使用 Excel VBA 在单元格/字符串中查找 URL
【发布时间】:2017-03-15 23:06:03
【问题描述】:

我有一个单元格/字符串,其中包含各种信息,包括 RAW http:// 链接。

我想找到一种方法来提取这些 RAW URL 并将它们转换为 HTML 链接(等等 Excel 中不可点击的链接)。看下面的例子:

Source: This is a sample link: http://www.bbc.co.uk Please visit.
Output: This is a sample link: <a href="http://www.bbc.co.uk">http://www.bbc.co.uk</a> Please visit.

我已经涉足了替换功能,但这似乎并没有给我所需的结果。

任何帮助表示赞赏。

【问题讨论】:

  • 欢迎来到 SO,请使用 tour 并向我们展示您的尝试(edit 您的帖子包含您的公式)! ;)
  • 不幸的是,我没有针对上述问题的任何工作代码。寻找关于从哪里开始的指针。
  • 好的,但是如你所见,不需要代码! ;) 但你绝对应该选择tour(点击“游览”,它是蓝色的,所以它是一个链接!;))

标签: vba excel excel-formula


【解决方案1】:

这是一个将替换的 UDF。并且还应该与同一字符串中的多个 URL 一起使用。 IT 使用正则表达式引擎来完成这项工作,并会找到具有各种协议(例如 http、https、ftp、文件)的 URL

此外,如果链接是句子的一部分,则末尾的标点符号(例如句号、逗号等)将不会包含在 html 标记中。


Option Explicit
Function LinkToHTML(S As String) As String
    Dim RE As Object
    Const sPat As String = "\b(https?|ftps?|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]"
    Const sRepl As String = "<a href=""$&"">$&</a>"

Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = sPat
    .ignorecase = True
    LinkToHTML = .Replace(S, sRepl)
End With

End Function

【讨论】:

  • Ron 完美无缺,正是我能找到的。非常感谢。
  • 这在单元格中效果很好,但在从 VBA 中调用它时无法执行相同的结果。 Output = "This is a test link http://www.bbc.co.uk"LinkToHtml (Output)
  • @AdeThompson 它在这里工作正常,无论是从单元格调用还是从 VBA 例程中调用。您的输出表明没有调用 Regex 过程,或者无法识别 URL。
  • @AdeThompson 如果您的注释中的行代表两行 VBA 代码,那么您没有对公式的输出做任何事情。你需要把它分配给一些东西。
  • 是的,感谢最终解决了这个问题。认为它会适用于变量,但没有。再次感谢。
【解决方案2】:

如果您的输入在 A1 中,请将其放在 A2 中以获取已清理的链接:

=TRIM(SUBSTITUTE(SUBSTITUTE(A1,"This is a sample link: ","")," Please visit.",""))

在 A2 中使用已清理的链接:

="This is a sample link: <a href="""&A2&""">"&A2&"</a> Please visit."

或两者结合(在 A1 中输入):

="This is a sample link: <a href="""&TRIM(SUBSTITUTE(SUBSTITUTE(A1,"This is a sample link: ","")," Please visit.",""))&""">"&TRIM(SUBSTITUTE(SUBSTITUTE(A1,"This is a sample link: ","")," Please visit.",""))&"</a> Please visit."

【讨论】:

  • 单元格/字符串内容会有所不同,因此无法搜索特定字符串。唯一不变的是应该以 http:// 或只是 www 开头的 url。
  • @AdeThompson :你可以在你的问题中这么说......但首先,我坚持让你接受tour
  • 也许我不清楚,但我认为“包含各种信息”就足够了。我已经参观了......两次。
【解决方案3】:

哦-key-doh-key...所以你是'...寻找关于从哪里开始的指针。'。这是一个开始:

=SUBSTITUTE(REPLACE(A2, FIND(" ", A2, FIND("http", A2)), 1, """>"), " http", "<a href=""http")&"</a>"

现在您可以使用相同的函数和方法来优化它,将 URL 剥离到锚元素中。

【讨论】:

  • 这似乎只是给了我价值!
  • 好的,我解决了,不包括 URL 后面的文本。这似乎让我更接近解决方案。如果它发现多个 URL 实例,只需要弄清楚如何让它做到这一点。哦,还将 URL 与 标记放在一起。感谢您的帮助。
  • 上面的公式显示了如何找到 URL 的开头和结尾,使用这些和一些数学运算以及 MID 函数将 URL 提取到现有 REPLACE 函数的替换文本中。
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多