我有一个电子表格,其中有大量单元格包含超链接,且这些超链接的显示文本与超链接的位置不同
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
这应该返回所有超链接的完整文本字符串(我在末尾添加了一个空格,因此如果有多个,它们会被分开)。