如何从Excel的HYPERLINK函数公式中提取超链接地址存入变量?
超链接地址提取方案
1. 有没有专用的提取函数?
Excel 没有内置可以直接提取HYPERLINK函数参数的工作表专用函数,你可以选择VBA自定义函数或者字符串拆分两种方式实现需求。
2. 方案1:VBA自定义函数(推荐,稳定性高)
不需要处理复杂的字符串转义场景,直接解析公式参数即可,兼容参数为硬编码路径、单元格引用等多种情况,代码如下:
Function GetHyperlinkPath(rng As Range) As String Dim formulaStr As String ' 过滤无公式、非HYPERLINK函数的单元格 If Not rng.HasFormula Or InStr(1, rng.Formula, "HYPERLINK", vbTextCompare) = 0 Then GetHyperlinkPath = "" Exit Function End If formulaStr = rng.Formula Dim firstQuotePos As Long, secondQuotePos As Long firstQuotePos = InStr(formulaStr, """") ' 处理参数为单元格引用的情况,比如HYPERLINK(A1,B1) If firstQuotePos = 0 Then Dim paramStart As Long, paramEnd As Long paramStart = InStr(formulaStr, "(") + 1 paramEnd = InStr(formulaStr, ",") ' 兼容部分区域参数分隔符为分号的情况 If paramEnd = 0 Then paramEnd = InStr(formulaStr, ";") GetHyperlinkPath = Range(Trim(Mid(formulaStr, paramStart, paramEnd - paramStart))).Value Exit Function End If ' 处理路径内带转义引号的场景(Excel里文本内的引号用两个双引号表示) secondQuotePos = InStr(firstQuotePos + 1, formulaStr, """") Do While Mid(formulaStr, secondQuotePos + 1, 1) = """" secondQuotePos = InStr(secondQuotePos + 2, formulaStr, """") Loop GetHyperlinkPath = Replace(Mid(formulaStr, firstQuotePos + 1, secondQuotePos - firstQuotePos - 1), """""", """") End Function ' 额外配套文件有效性校验函数,直接传入提取的路径即可返回是否存在 Function FileExists(path As String) As Boolean FileExists = Dir(path) <> "" End Function
使用方式:按Alt+F11打开VBA编辑器,插入模块粘贴上述代码,回到工作表后在空白单元格输入=GetHyperlinkPath(A1)即可提取对应单元格的超链接路径,输入=FileExists(路径单元格)即可校验文件有效性,批量下拉填充即可处理所有单元格。
3. 方案2:工作表公式字符串操作
如果无法启用宏,可以用公式拆分,仅适合HYPERLINK第一个参数是硬编码文本、路径内无额外引号的场景,假设目标公式在A1单元格,公式如下:
=LET( 公式文本,FORMULATEXT(A1), 左引号位置,FIND("""",公式文本), 右引号位置,FIND("""",公式文本,左引号位置+1), MID(公式文本,左引号位置+1,右引号位置-左引号位置-1) )
如果你使用的Excel版本不支持
LET函数,可以用嵌套公式实现:=MID(FORMULATEXT(A1),FIND("""",FORMULATEXT(A1))+1,FIND("""",FORMULATEXT(A1),FIND("""",FORMULATEXT(A1))+1)-FIND("""",FORMULATEXT(A1))-1)
内容的提问来源于stack exchange,提问作者Palisek
相关产品推荐
相关产品推荐

