使用Excel VBA在单元格/字符串中查找URL

3

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

我想找到一种方法来提取这些原始的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.

我尝试使用替换函数,但似乎无法得到所需的结果。欢迎提供任何帮助。

1
欢迎来到SO,请参观一下我们的[tour],并展示一下你尝试过什么([edit]你的帖子以包含你的公式)!;) - R3uK
很遗憾,我没有针对上述问题的可用代码。正在寻找开始的指引。 - Ade Thompson
1
好的,但正如你所看到的,没有必要写代码!;) 但你绝对应该参观一下(点击“tour”,它是蓝色的,所以是一个链接!;)) - R3uK
3个回答

1

好的,你正在寻找有关编程起步的指南。以下是一些起点:

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

现在您可以使用相同的函数和方法对其进行精炼,以将URL剥离为锚元素。

enter image description here


这似乎只是给我一个值! - Ade Thompson
好的,我解决了,没有包括URL后面的文本。这似乎让我更接近解决方案了。只需要解决如何使它在找到多个URL实例时执行。哦,还要将URL放在<a href>标签中。感谢您的帮助。 - Ade Thompson
上述公式展示了如何找到URL的开头和结尾,利用这些信息再加上MID函数进行一些简单的数学计算,就可以将URL提取出来并放入现有的REPLACE函数的替换文本中。 - user4039065

1
这里有一个UDF将替换。它也可以处理同一字符串中的多个URL。它使用正则表达式引擎来完成工作,并将找到各种协议的URL(例如http,https,ftp,File)。
此外,如果链接是句子的一部分,则末尾的标点符号(例如句号、逗号等)不会包含在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

enter image description here


Ron,这个完美地运作了,正是我所需要的。非常感谢。 - Ade Thompson
这在单元格内运行得很好,但无法在从VBA中调用时产生相同的结果。Output =“这是一个测试链接http://www.bbc.co.uk” LinkToHtml(Output) - Ade Thompson
@AdeThompson 这里运行良好,无论是从单元格中调用还是从 VBA 程序中调用。您的输出表明 Regex 过程未被调用,或者无法将 URL 识别为有效格式。 - Ron Rosenfeld
@AdeThompson 如果你评论中的一行代表两行VBA代码,那么你没有对公式的输出做任何处理。你需要将其分配给某个变量。 - Ron Rosenfeld
是的,谢谢,最终解决了。我认为它会应用于变量,但事实并非如此。再次感谢。 - Ade Thompson
我总有一天要学习正则表达式,但现在@RonRosenfeld这个方法完美地解决了我的问题!谢谢。 - emjaySX

1
如果您的输入在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."

单元格/字符串内容会有所变化,因此无法搜索特定字符串。唯一恒定的是 URL,应该以 http:// 或仅以 www 开头。 - Ade Thompson
@AdeThompson:你本可以在问题中说明的...但首先,**我坚持要求你参观[导览]**。 - R3uK
也许我没有表达清楚,但我认为“包含各种信息”已经足够了。我已经参观过...两次了。 - Ade Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接