我可以使用Excel公式提取单元格中超链接的链接位置吗?


46

我有一个电子表格,其中包含大量包含超链接的单元格,这些超链接的显示文本与超链接位置不同

即:

单元格位置:A1

显示文字=“网站信息”

超链接位置=“ http://www.mylocation.com

是否有一个Excel公式可以让我访问超链接位置的文本字符串?

理想的情况是这样的:

FORMULA(A1)=“ http://www.mylocation.com


1
实际的超链接(插入>>超链接)或使用=HYPERLINK()?的超链接

它必须是一个公式吗?有很多VBA解决方案。
CharlieRB 2013年

Answers:


53

您可以使用宏:

  • 打开一个新的工作簿。
  • 进入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
    

4
@igor为什么在cell.range(“ A1”)。Hyperlinks.Count和cell.range(“ A1”)。Hyperlinks(1).Address中使用“ range(” a1“)?我复制了您的宏,但是将其取出(-> cell.hyperlinks.count和cell.hyperlinks(1).adress),它可以正常工作。我对这里的“ range(“ a1”)用途感到好奇。
PO

这假定处理超链接内是否有多个链接。这只是一个主意,很好地与您进行了调整。:)
Igor O

如果您的超链接包含文档片段(例如,#something),存储在SubAddress,所以你需要连接Address"#"SubAddress
gilly3 '18

由于parameter cell是一个范围对象,因此它可以包含多个单元格。 Range("A1")可以改写为Cells(1)。它指示函数仅考虑parameter中的第一个单元格cell
ChrisB

19

我只需要从单个单元格的值中提取地址,所以我发现这个方便的小函数:

除了“蛮力”宏,您还可以创建一个用户定义的函数,该函数将提取并返回指向它的任何超链接的URL:

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

在这种情况下,您可以将其放置在所需的位置。例如,如果要在单元格C25中列出来自A1中超链接的URL,则在单元格C25中,您将输入以下公式:

= GetURL(A1)

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


2
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");
  }

}

在其他省略引号的地方,通过在电子表格= EXTRACT_URL(ADDRESS(row(A4),1,4))中使用此引用来传递单元格引用。否则,您必须对范围参考进行硬编码。然后,您可以将此功能从一个单元格复制到另一个单元格。
沃克·罗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.