我可以使用Excel公式提取單元格中超連結的連結位置嗎?

我可以使用Excel公式提取單元格中超連結的連結位置嗎?

我有一個電子表格,其中包含大量單元格,其中包含顯示文字與超連結位置不同的超連結

IE:

社區位置:A1

顯示文字=“網站資訊”

超連結位置=“http://www.mylocation.com

有沒有一個Excel公式可以讓我存取超連結位置的文字字串?

理想情況下它看起來像這樣:

公式(A1) = "http://www.mylocation.com

答案1

我只需要從單一單元格的值中提取地址,所以我發現這個小函數很方便:

除了「強力」巨集之外,您還可以建立一個使用者定義的函數,該函數將提取並傳回它所指向的任何超連結的 URL:

Function GetURL(rng As Range) As String
     On Error Resume Next
     GetURL = rng.Hyperlinks(1).Address 
End Function

在這種情況下,您可以將其放置在您想要的位置。例如,如果您希望將 A1 中的超連結的 URL 列在儲存格 C25 中,則可以在儲存格 C25 中輸入下列公式:

=取得URL(A1)

http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html

答案2

您可以使用巨集:

  • 開啟一個新的工作簿。
  • 進入 VBA(按 Alt+F11)
  • 插入新模組(插入 > 模組)
  • 複製並貼上下面的 Excel 使用者定義函數
  • 退出 VBA(按 Alt+Q)
  • 對此自訂 Excel 函數使用下列語法:=GetURL(cell,[default_value])

     Function GetURL(cell As range, Optional default_value As Variant)
     'Lists the Hyperlink Address for a Given Cell
     'If cell does not contain a hyperlink, return default_value
          If (cell.range("A1").Hyperlinks.Count <> 1) Then
              GetURL = default_value
          Else
              GetURL = cell.range("A1").Hyperlinks(1).Address
          End If
    End Function
    

答案3

function EXTRACT_URL(input) {

  var range = SpreadsheetApp.getActiveSheet().getRange(input);
  var re = /^.+?\(\"(.+?)\",.+?$/;
  if (input.indexOf(':') != -1) {
    var formulas = range.getFormulas();
    for (var i in formulas) {
      for (var j in formulas[i]) {
        formulas[i][j] = formulas[i][j].replace(re, "$1");
      }
    }
    return formulas;
  } else {
    return range.getFormula().replace(re, "$1");
  }

}

答案4

我和@SAL有同樣的問題

我發現該.Hyperlink物件實際上將地址拆分為.Address.SubAddress如果遇到分隔符號。 「#」就是這樣的分隔符號之一(我不知道是否還有其他分隔符號)。

請參閱上面 @gilly3 的評論以及另一個 StackOverflow 問題: hyperlinks(1).address 僅傳回部分位址

還有微軟關於 .SubAddress 的(不完整)文件: Hyperlink.SubAddress 屬性

任何地方都沒有提到的一件事是,「#」分隔符號不包含在其中.Address.SubAddress因此如果您想要一個實際上可以用作完整 URL 的位址,則必須重新新增「#」分隔符號。

這樣,我修改了@Matthew Lock的程式碼如下,還包括從@Igor O儲存多個超連結的可能性以及我添加的「#」:

 Function getURL(rng As Range) As String
     On Error Resume Next
     fullURL = ""
     For Each HL In rng.Hyperlinks
    
         If Len(HL.SubAddress) > 0 Then
             fullURL = fullURL & HL.Address & "#" & HL.SubAddress & " "
         Else
             fullURL = fullURL & HL.Address & " "
         End If

     Next

     getURL = fullURL

 End Function

這應該會傳回所有超鏈接的完整文字字串(我在末尾添加了一個空格,因此如果有多個超鏈接,它們將被分隔開)。

相關內容