从Excel超链接公式中提取URL

时间:2015-08-26 15:24:27

标签: excel vba hyperlink

我有一个包含数百个使用超链接公式=HYPERLINK( <targetURL>, <friendlyName> )的单元格的Excel文件。我需要从这些中提取纯文本URL。我发现的大多数示例都依赖于使用不同超链接方法的单元格。

所以像这样的函数:

Function HyperLinkText(pRange As Range) As String

   Dim ST1 As String
   Dim ST2 As String

   If pRange.Hyperlinks.Count = 0 Then
      HyperLinkText = "not found"
      Exit Function
   End If

   ST1 = pRange.Hyperlinks(1).Address
   ST2 = pRange.Hyperlinks(1).SubAddress

   If ST2 <> "" Then
      ST1 = "[" & ST1 & "]" & ST2
   End If

   HyperLinkText = ST1

End Function

导致单元格文本&#34;未找到&#34;。或者,有没有办法将这些单元格转换为另一种超链接格式,以便我可以使用宏?

5 个答案:

答案 0 :(得分:1)

您可以使用正则表达式提取它:

Dim re
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "^=HYPERLINK\(""([^""]+)"""

If re.Test(pRange.Formula) Then
    Debug.Print "URL = " & re.Execute(pRange.Formula)(0).SubMatches(0)
Else
    Debug.Print "URL not found"
End If

这只是检查公式是否以:

开头
=HYPERLINK("

,如果是,则从该点抓取文本,直到以下"

答案 1 :(得分:0)

嗯 - 玩弄它,我也无法让.Address工作。

你说你只想提取网址,我能用这个宏做到这一点:

Function hyperlinkText(pRange As Range) As String
Dim st1 As String, st2 As String
Dim tempSub1 As String, tempSub2 As String

If Left(pRange.Formula, 10) <> "=HYPERLINK" Then
    hyperlinkText = "not found"
    Exit Function
Else
    tempSub1 = WorksheetFunction.Substitute(pRange.Formula, """", "[", 1)
    tempSub2 = WorksheetFunction.Substitute(tempSub1, """", "]", 1)
    hyperlinkText = Mid(tempSub2, WorksheetFunction.Find("[", tempSub2) + 1, WorksheetFunction.Find("]", tempSub2) - WorksheetFunction.Find("[", tempSub2) - 1)
End If

End Function

但请注意,它并没有获得&#34;友好名称&#34; Hyperlink()公式,只是URL。

答案 2 :(得分:0)

非VBA可能性:

使用链接处理单元格的副本,因为第一步是替换部分内容(特别是=,我建议使用not sign ¬)。然后,假设副本在A1:

=SUBSTITUTE(LEFT(MID(A1,13,LEN(A1)),FIND("""",MID(A1,13,LEN(A1)))-1),"¬","=")  

并将¬替换为=,其中链接包含等号。

答案 3 :(得分:0)

我最终使用Python:

  1. 将电子表格下载(或转换为xlsx格式)。
  2. 使用pip或conda安装 openpyxl
  3. 使用类似于:

    的代码读取xlsx
    from openpyxl import load_workbook
    wb = load_workbook(filename = 'cities.xlsx')
    print(wb.worksheets)
    print(dir(wb))
    sheet_ranges = wb['Sheet1']
    for c in sheet_ranges['B']:
        print(c.hyperlink.target)
    
  4. 请注意名称&#39; Sheet1&#39;或列名称可能因具体情况而异(&#39; B&#39;是我的情况下带超链接的列)。

    1. 打印链接后,将它们复制并粘贴到工作表中的新列中。

答案 4 :(得分:0)

这是一个Excel公式,可以从用于单元格的超链接中提取URL。

A1 =要提取网址的Excel单元格。

=MID(FORMULATEXT(A1),FIND(CHAR(34),FORMULATEXT(A1))+1,FIND(CHAR(34),FORMULATEXT(A1),FIND(CHAR(34),FORMULATEXT(A1))+1)-1-FIND(CHAR(34),FORMULATEXT(A1)))

Excel Formula to get URL from excel hyperlink [Image]