如何从Excel中的超链接中提取URL
我的许多项目都涉及处理来自网络的数据,当我从其他来源复制数据时,我会在 Excel 的单元格中获得超链接。
如下图所示(来源):
我经常要做的第一件事就是从这些超链接中提取 URL,以便我可以对这些提取的 URL 进行分析。
如何从Excel中的超链接中提取URL?
如果您只有几个超链接单元格且列表较长,则可以手动完成此操作,但最好使用 VBA 完成此操作。
在这篇文章中,我将向您展示如何从超链接中提取URL使用手动方法,以及在可以批量提取 URL 时使用 VBA 自动执行此过程。
推荐:如何将Word/Excel/PowerPoint文件固定到Windows 11任务栏应用程序图标
手动从超链接中提取 URL
如果您只想从中提取几个超链接的 URL,则最好手动执行此操作。
下面,我有一个数据集,其中 A 列中有超链接,我想从 B 列中的每个单元格中提取 URL:
以下是手动从超链接中提取 URL 的步骤:
- 右键单击具有超链接的单元格。
- 在显示的选项中,单击“编辑超链接”选项。 这将打开“编辑超链接”对话框。
- 复制地址字段中列出的 URL(选择 URL 并使用 Control + C)
- 关闭对话框。
- 转到您想要 URL 的单元格并将其粘贴到那里。
- 对要从中提取超链接的所有单元格重复步骤 1-5。
专家提示:您还可以使用键盘快捷键打开编辑超链接对话框 控制+K (需要按住 Control 键,然后按 K 键)
由于这是一个手动过程,您需要从每个单元格中逐个提取 URL,因此当您只有几个单元格需要处理时,这是最适合的。
如果您有大量超链接并希望从中提取 URL,那么最好使用接下来介绍的 VBA 方法。
Also read: Remove Hyperlinks from a Worksheet in Excel
从超链接中提取 URL 的 VBA 代码
如果您有许多超链接单元格,您想要从中提取 URL 或需要经常执行此操作,那么最好创建一个可为此目的重复使用的 VBA 代码。
让我们以下面的数据集为例,其中 A 列中有超链接的单元格,我想从 B 列中的这些单元格中提取 URL。
下面是执行此操作的 VBA 代码。
Sub ExtractURLs()
' Declares a variable for the Hyperlink object
Dim HypLnk As Hyperlink
' Loops through each hyperlink and extract URL in adjacent cell
For Each HypLnk In Selection.Hyperlinks
HypLnk.Range.Offset(0, 1).Value = HypLnk.Address
Next HypLnk
End Sub
要使用上面的代码,您需要首先选择具有超链接的单元格,然后运行宏代码。
它的工作原理是循环遍历所选范围内的每个单元格并提取相邻单元格中的 URL。
以下是在 Excel 中使用此 VBA 代码的步骤:
- 使用快捷键 ALT + F11 打开 VB 编辑器。 或者,您也可以单击“开发人员”选项卡,然后单击“Visual Basic”图标以打开 VB 编辑器。
- 在 VB 编辑器中,单击 插入 菜单中的选项,然后单击 模块。 这将为该工作簿插入一个新模块。
- 将上述 VBA 代码复制并粘贴到模块代码窗口中。
- 将光标置于代码中的任意位置,然后按键盘上的 F5 键运行 VBA 代码(或单击工具栏中的播放图标)。
上述步骤将运行 VBA 代码,该代码会将所选单元格中所有超链接中的所有 URL 提取到右侧相邻的列中。
下面,我有相同代码的变体,它会要求用户选择一个范围(使用输入框),然后提取相邻列中的 URL。
Sub ExtractURLs()
' Declares variables for range and hyperlink objects
Dim rng As Range
Dim HypLnk As Hyperlink
' Prompts the user to select a range
On Error Resume Next
Set rng = Application.InputBox("Please select a range:", "Select Range", Type:=8)
On Error GoTo 0
' Loops through each hyperlink and extract in adjacent cell
If Not rng Is Nothing Then
For Each HypLnk In rng.Hyperlinks
HypLnk.Range.Offset(0, 1).Value = HypLnk.Address
Next HypLnk
Else
MsgBox "No valid range selected.", vbExclamation
End If
End Sub
以下是在 Excel 中使用 VBA 代码时需要了解的一些重要事项:
- 如果您想在同一工作簿中再次重用此代码,则需要将工作簿另存为启用宏的文件(扩展名为 .XLSM)
- 如果您想在系统上的所有 Excel 工作簿中使用此 VBA 代码,您可以将此代码保存在您的个人宏工作簿中。 一旦保存在个人宏工作簿中,它就可以在系统上的任何工作簿中运行。
- 您还可以将宏图标添加到快速访问工具栏,然后通过单击 QAT 中的该图标来运行宏。
Also read: Find Hyperlinks in Excel (using Find and Replace)
从超链接中提取 URL 的函数 (UDF)
从超链接中提取 URL 的另一种有用方法是使用 VBA 创建自定义用户定义函数 (UDF),然后在工作表中使用该函数来提取 URL。
下面是创建名为 ExtractURL 的函数的 VBA 代码,该函数可在工作表中使用。 它将具有超链接的单元格引用作为输入,并给出 URL 作为公式的结果。
Function ExtractURL(rng As Range) As String
' Checks if the first cell in the specified range contains hyperlink
If rng(1).Hyperlinks.Count <> 1 Then
' If not, returns an empty string
ExtractURL = ""
Else
' If there is a hyperlink, returns its URL
ExtractURL = rng.Hyperlinks(1).Address
End If
End Function
让我向您展示如何在 Excel 中创建和使用此自定义函数来从超链接中提取 URL。
下面是数据集,其中 A 列中有超链接,我想提取 B 列中的 URL。
以下是使用 VBA UDF 函数执行此操作的步骤:
- 使用快捷键 ALT + F11 打开 VB 编辑器。
- 在 VB 编辑器中,单击菜单中的“插入”选项,然后单击“模块”。 这将为该工作簿插入一个新模块。
- 将上述函数 VBA 代码复制并粘贴到模块代码窗口中。
- 返回工作表并在单元格 B2 中输入以下公式:
=ExtractURL(A2)
复制并粘贴该列中所有其他单元格的公式和单元格 B2。
自从我创建了这个函数以来 提取网址 在 VBA 中,我可以将其用作单元格中的常规工作表函数。
当您使用此公式时,它会返回到 VBA 中的代码并按照步骤为您提供 URL 作为结果。 如果单元格为空白或没有超链接,则返回空白(“”)。
在 Excel 中使用自定义用户定义的 VBA 函数时需要了解以下几点:
- 如果您想在同一工作簿中再次重复使用此公式,则需要将工作簿另存为启用宏的文件(扩展名为 .XLSM)
- 如果从 VB 编辑器中删除公式的 VBA 代码,则会在工作表中出现错误。 因此,如果您打算在后端不使用 VBA 代码,则应该将公式结果转换为静态值。
- 如果您想在系统上的所有 Excel 工作簿中使用此函数,您可以将此代码保存在您的个人宏工作簿中。
- 如果您与某人共享包含 UDF 代码的 Excel 文件,而他们没有启用宏,他们将看到错误而不是公式结果。
您可以使用这些方法从 Excel 中的超链接中快速提取 URL。
如果您只有几个带有超链接的单元格,则可以使用编辑超链接对话框手动执行此操作。
如果您有很多带有超链接的单元格,或者您需要经常执行此操作,则可以使用我介绍的 VBA 代码方法或创建您自己的自定义函数,如我所示。
我希望他觉得这个教程很有用。 如果您有任何意见或反馈,请在评论部分告诉我。