如何在Excel中将文本URL列转换为活动超链接?

355

我在Excel中有一列,其中包含所有网站URL的值。我的问题是,我想将这些URL值转换为活动链接。该列中有大约200个条目,所有单元格中的URL都不同。是否有一种方法可以在不编写宏的情况下为所有单元格创建活动超链接。

24个回答

3
我发现如果超链接没有包含http://作为链接到本地位置,这里的任何方法都不起作用。
我还希望使脚本具有防错功能,因为用户无法自行维护它,而我也不会一直在。
只有当选定范围内的单元格包含一个点并且没有空格时,它才会运行。它最多只能运行10,000个单元格。
Sub HyperAdd()
Dim CellsWithSpaces As String
    'Converts each text hyperlink selected into a working hyperlink
    Application.ScreenUpdating = False
    Dim NotPresent As Integer
    NotPresent = 0

    For Each xCell In Selection
        xCell.Formula = Trim(xCell.Formula)
        If xCell.Formula = "" Or InStr(xCell.Formula, ".") = NotPresent Then
        'Do nothing if the cell is blank or contains no dots
        Else
            If InStr(xCell.Formula, " ") <> 0 Then
                CellsWithSpaces = CellsWithSpaces & ", " & Replace(xCell.Address, "$", "")
                 GoTo Nextxcell
            End If

            If InStr(xCell.Formula, "http") <> 0 Then
                Hyperstring = Trim(xCell.Formula)
            Else
                Hyperstring = "http://" & Trim(xCell.Formula)
            End If

            ActiveSheet.Hyperlinks.Add Anchor:=xCell, Address:=Hyperstring

        End If
        i = i + 1
        If i = 10000 Then Exit Sub
Nextxcell:
      Next xCell
    If Not CellsWithSpaces = "" Then
        MsgBox ("Please remove spaces from the following cells:" & CellsWithSpaces)
    End If
Application.ScreenUpdating = True
End Sub

1
谢谢,这个方法对于在Excel文档中的电子邮件地址有效 - 我尝试了几种不同的方法,但这是唯一有效的方法,尽管我需要将http://更改为mailto:。 - bawpie

3

对于我来说,我只是将整个包含文本格式URL的列复制到另一个应用程序(比如Evernote)中,当它们被粘贴到那里时,它们变成了链接,然后我再将它们复制回Excel。

唯一需要注意的是,你需要确保你复制回来的数据与其他列对齐。


2
尝试这个:
=HYPERLINK("mailto:"&A1, A1)
将A1替换为您的电子邮件地址单元格文本。

2
对于使用Excel 2016的用户,您可以简单地选择要添加链接的列,然后在“样式”框中的“主页”选项卡上单击“超链接”选项。

enter image description here

编辑:不幸的是,这只更新了单元格样式,而不是函数。

4
这只提供单元格样式,不能使URL可点击。 - stenlytw
2
是的,我认为这是一个很好的解决方案,但它不起作用。 这真的令我困惑,因为这很困难。 - Dan
2
我刚刚测试了一下,你们两个是正确的;我被单元格样式欺骗了。 - jGroot
1
@jGroot - 这正是我想要的,只有样式而没有功能。 - Raj Rajeshwar Singh Rathore

1
如果您将文本内容复制到新的列中并使用以下方法:
=HYPERLINK("http://"&B10,B10) 

在你的原始列上使用$,使其看起来像这样:

=HYPERLINK("http://"&$B10,$B10)

这是我在Windows 7上的Excel 2010中唯一有效的方法。您可以拖动公式以复制。


1
将URL放入HTML表格中,将HTML页面加载到浏览器中,复制该页面的内容,粘贴到Excel中。此时,URL被保留为活动链接。
该解决方案是由Jim Gordon Mac MVP在http://answers.microsoft.com/en-us/mac/forum/macoffice2008-macexcel/how-to-copy-and-paste-to-mac-excel-2008-a-list-of/c5fa2890-acf5-461d-adb5-32480855e11e上提出的。
我发现它非常有效。
我有这些URL:

https://twitter.com/keeseter/status/578350771235872768/photo/1 https://instagram.com/p/ys5ASPCDEV/ https://igcdn-photos-g-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-15/10881854_329617847240910_1814142151_n.jpg https://twitter.com/ranadotson/status/539485028712189952/photo/1 https://instagram.com/p/0OgdvyxMhW/ https://instagram.com/p/1nynTiiLSb/

我将它们放入一个HTML文件(links.html)中,就像这样:
<table>
<tr><td><a href="https://twitter.com/keeseter/status/578350771235872768/photo/1">https://twitter.com/keeseter/status/578350771235872768/photo/1</a></td></tr>
<tr><td><a href="https://instagram.com/p/ys5ASPCDEV/">https://instagram.com/p/ys5ASPCDEV/</a></td></tr>
<tr><td><a href="https://igcdn-photos-g-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-15/10881854_329617847240910_1814142151_n.jpg">https://igcdn-photos-g-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-15/10881854_329617847240910_1814142151_n.jpg</a></td></tr>
<tr><td><a href="https://twitter.com/ranadotson/status/539485028712189952/photo/1">https://twitter.com/ranadotson/status/539485028712189952/photo/1</a></td></tr>
<tr><td><a href="https://instagram.com/p/0OgdvyxMhW/">https://instagram.com/p/0OgdvyxMhW/</a></td></tr>
</table>

然后我将links.html加载到浏览器中,复制并粘贴到Excel中,链接是可点击的。

1
你可以在相邻的单元格中插入公式=HYPERLINK(<your_cell>,<your_cell>),并将其沿着底部拖动。这将给你一列所有链接。现在,你可以通过点击标题选择原始列,右键单击并选择隐藏

1
感谢Cassiopeia提供的代码。我将他的代码更改为适用于本地地址,并对其条件进行了小幅修改。我删除了以下条件:
  1. http:/更改为file:///
  2. 删除了所有类型的空格条件
  3. 将10k单元格范围条件更改为100k

Sub HyperAddForLocalLinks()
Dim CellsWithSpaces As String
    'Converts each text hyperlink selected into a working hyperlink
    Application.ScreenUpdating = False
    Dim NotPresent As Integer
    NotPresent = 0

    For Each xCell In Selection
        xCell.Formula = Trim(xCell.Formula)
            If InStr(xCell.Formula, "file:///") <> 0 Then
                Hyperstring = Trim(xCell.Formula)
            Else
                Hyperstring = "file:///" & Trim(xCell.Formula)
            End If

            ActiveSheet.Hyperlinks.Add Anchor:=xCell, Address:=Hyperstring

        i = i + 1
        If i = 100000 Then Exit Sub
Nextxcell:
      Next xCell
    Application.ScreenUpdating = True
End Sub

完美地工作了,我在短短几秒钟内创建了大约7000个超链接。 :) 谢谢Cassiopeia。 - Junaid
你为什么定义了NotPresent - Steffen Roller
我只是从之前Cassiopeia的回复中复制了上面的代码。并根据我理解进行了修改。所以我不知道NotPresent是否必要。但是我的修改后的代码完美地运行。 - Junaid

1
在Mac上,一个非常简单的方法是在Excel中选择整个电子表格,复制,启动Numbers,粘贴,然后选择全部,复制,并粘贴回Excel。

如果你的数据集很小,也许可以考虑。我只有6,400行和10列,粘贴它花了5分钟时间,而且所有数据都挤在第一列里。(从Google Sheets复制到Excel只需要3秒钟。)每次我尝试使用Numbers时,它总是非常缓慢、令人沮丧的体验。 - Neil Monroe
我刚刚为一个有750行和50列的电子表格做了这件事,将其粘贴到Numbers中大约需要20秒钟,再将其复制并粘贴回Excel需要另外30秒钟。列没有问题,不会被压缩成一列。如果只有一列包含URL,只需复制并粘贴该列,我的750行只需要大约1秒钟。 - mrzzmr
其他答案都很复杂,但这个并不算太糟糕,尤其是对于使用macOS的约25%用户来说。我感谢你把这个作为一个答案发布出来。谢谢。 - Joshua Pinter

1
我有一列数字,需要转换成超链接。例如,我有一个包含问题编号的A列(即2595692、135171),我想把这些问题编号转换为超链接,并仅显示问题编号。
因此,我建立了一个指向A列的纯文本超链接,并将其复制到所有问题编号中。

="=HYPERLINK("&"""http""&"":"""&""&"&"&"""//stackoverflow.com/questions/"&A1&""""&","&A1&")"

然后我将这一列文本超链接的值复制 - 粘贴到另一列中。

最终你会得到一个看起来像下面这样的文本列:

=HYPERLINK("http"&":"&"//stackoverflow.com/questions/2595692",2595692)

然后我选择了这些粘贴的项目,并运行了下面的F2Entry宏:

Sub F2Enter()
Dim cell As Range
Application.Calculation = xlCalculationManual
For Each cell In Selection
    cell.Activate
    cell = Trim(cell)
Next cell
Application.Calculation = xlCalculationAutomatic
EndSub

然后我删除了文本输入列和A列。

最终只剩下一个热链接的问题编号列:

2595692

135171

等等。

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接