我可以使用 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 仅返回部分地址

此外,Microsoft 关于 .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

这应该返回所有超链接的完整文本字符串(我在末尾添加了一个空格,因此如果有多个,它们会被分开)。

相关内容