如何在Excel的CONCATENATE函数中使用超过255个字符?我实际上也在EXCEL的HYPERLINK函数中使用CONCATENATE函数。一个例子如下:
=HYPERLINK(CONCATENATE("http://www.google/com/morethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255chars","morethan255chars morethan255charsmorethan255charsmorethan255charsmorethan25"),"link");
更新:这不是CONCATENATE函数的问题,而是HYPERLINK函数的第一个参数的问题。直接/间接使用长度超过255个字符的字符串(例如:= HYPERLINK(K204,“link”),其中K204包含256个字符的长度链接)HYPERLINK函数失败
我意识到我可以使用URL缩短器,但我正在为大量链接做这个,这需要很多人手动使用URL缩短器。
答案 0 :(得分:4)
更新:由于Karls的评论,我重新审视了我的答案,Excel 2007似乎不再允许用户定义函数设置超链接(非常合理,请参阅我自己在代码中的注释)。所以原始代码(在行下面)在最新版本的Excel中不起作用(我没有测试Excel 2010,但我假设结果是相同的)。由于历史原因,我不删除旧代码(编辑可能会认为不同 - 随意编辑/删除)。
剩下的就是以编程方式设置长超链接,例如
Sub insertVeryLongHyperlink()
Dim curCell As Range
Dim longHyperlink As String
Set curCell = Range("A1") ' or use any cell-reference
longHyperlink = "http://www.veryLongURL.com/abcde" ' Or a Cell reference like [C1]
curCell.Hyperlinks.Add Anchor:=curCell, _
Address:=longHyperlink, _
SubAddress:="", _
ScreenTip:=" - Click here to follow the hyperlink", _
TextToDisplay:="Long Hyperlink"
End Sub
以下内容在Excel 2010中不起作用;看我上面的评论
“从Word复制超链接并粘贴到Excel”让我思考。显然,限制是在内置的HYPERLINK函数和对话框窗口的“编辑超链接”中。另一方面,它应该 - 实际上 - 可以通过VBA设置更长的超链接。
此代码不再适用于Excel 2010
Function myHyperlink(cell As Range, _
hyperlinkAddress As String, _
Optional TextToDisplay As Variant, _
Optional ScreenTip As Variant)
' Inserts a Hyperlink
' at the position cell (this should be the position where the UDF is used,
' since the return value of the UDF is = TextToDisplay)
' with the hyperlinkAddress
' optional TextToDisplay
' optional ScreenTip
' #######################################
' Warning Warning Warning Warning Warning
' #######################################
' 1) Since it is really bad practice to have a function perform procedural
' tasks, you should not do this.
' 2) You have no garantee, the link is updated when the value hyperlinkAddress changes
' USE AT YOUR ONE RISK AND ONLY IN CASE OF EMERGENCIES :-)
' If more than one cell is selected as target range,
' use the top left cell
Set cell = cell.Resize(1, 1)
If IsMissing(TextToDisplay) Then
TextToDisplay = hyperlinkAddress
End If
If IsMissing(ScreenTip) Then
ScreenTip = hyperlinkAddress & " - Click here to follow the hyperlink"
End If
cell.Hyperlinks.Add Anchor:=ActiveCell, _
Address:=hyperlinkAddress, _
SubAddress:="", _
ScreenTip:=ScreenTip, _
TextToDisplay:=TextToDisplay
' There doesn't seem to be another way to set TextToDisplay
myHyperlink = TextToDisplay
End Function
用作普通的Excel函数,但一定要将当前单元格添加为第一个参数(即在单元格A1中插入以下公式)
=myHyperlink(A1,B1)
=myHyperlink(A1,B1,"TextToDisplay", "ScreenTip")
您既不能拉下公式也不能将其复制到另一个单元格。如果你这样做,你必须重新计算公式(ALT-CTRL-F9和ALT-CTRL-SHIFT-F9都没有重新计算似乎有效)所以进入每个单元格,按F2激活它并完成返回。
我希望我不会帮你搞砸过多的Excel工作簿。
编写一个显式启动的VBA可能更安全,它可以遍历列表并写入超链接。这样他们就可以重复使用而且没有任何功能。
此致 安德烈亚斯
答案 1 :(得分:1)
我有Excel 2007,我尝试在A1中创建一个包含300个字符的单元格,在B1中创建另外一个包含300个不同字符的单元格。
然后我做了C1 = CONCATENATE(A1, B1)
。
我可以看到两个细胞中的所有角色。没有遗漏或截断,也没有收到任何错误。这对我来说很好。
是什么让你认为连接失败了?您是否在查看结果时遇到问题?如果您的单元格包含1,024个以上的字符,则单元格中仅显示前1,024个字符。但是它们仍然存在,如果您复制并粘贴它们,则将复制所有字符。
修改强>
既然您已经编辑了问题,我就会发现问题出在HYPERLINK
而不是CONCATENATE
。
在Excel中绕过HYPERLINK
公式的255个字符限制的唯一方法是从Word复制超链接并将其粘贴到Excel中的单元格中。然后它可以超长。我知道如果你有很多链接这是一个不合理的手动过程,但它似乎是将它放入Excel电子表格的唯一方法,但它仍然是一个超链接,你可以点击并重定向。如果您不需要它像超链接那样,那么我建议重写您的查询以将超链接作为自己的文本字段返回,然后就可以了。
答案 2 :(得分:1)
你可能运气不好。似乎Excel中超链接的字符限制为256 here。如果你自己测试一下(我也有Excel 2007),=HYPERLINK(REPT("a",255))
可以正常工作而=HYPERLINK(REPT("a",256))
没有,并且会抛出 #VALUE!错误。
答案 3 :(得分:1)
以下是一些使用bitly.com来缩短网址的VBA。它基于bitly API documentation。
Public Function GetURL(longUrl As String) As String Dim xml As Object longUrl = URLEncode(longUrl) Set xml = CreateObject("MSXML2.XMLHTTP.6.0") xml.Open "GET", "https://api-ssl.bitly.com/v3/shorten?format=xml&access_token=MY_TOKEN=" & longUrl, False xml.Send GetURL = xml.responsetext head = InStr(GetURL, "<url>") + 5 tail = InStr(GetURL, "</url>") GetURL = Mid(GetURL, head, tail - head) End Function Function URLEncode(ByVal Text As String) As String Dim i As Integer Dim acode As Integer Dim char As String URLEncode = Text For i = Len(URLEncode) To 1 Step -1 acode = Asc(Mid$(URLEncode, i, 1)) Select Case acode Case 48 To 57, 65 To 90, 97 To 122 ' don't touch alphanumeric chars Case 32 ' replace space with "+" Mid$(URLEncode, i, 1) = "+" Case Else ' replace punctuation chars with "%hex" URLEncode = Left$(URLEncode, i - 1) & "%" & Hex$(acode) & Mid$(URLEncode, i + 1) End Select Next End Function
答案 4 :(得分:1)
Dunno如果我的答案仍然有用,但几天前我遇到了同样的问题,那么做一个超过255个字符限制的可行超链接的最佳方法和证明方法是先用CONCATENATE()
拆分它,并使用 CONCATENATE()
中具有VBA
功能的单元格。
对我来说,它看起来像:
A1 = LinkPart1
A2 = LinkPart2
A3 = LinkPart3
A5 = CONCATENATE( A1; A2; A3 )
VBA
您需要与 A5
链接的代码:
Sub insertVeryLongHyperlink()
Dim curCell As Range
Dim longHyperlink As String
Set curCell = Range("A7") ' or use any cell-reference
longHyperlink = [A5]
curCell.Hyperlinks.Add Anchor:=curCell, _
Address:=longHyperlink, _
SubAddress:="", _
ScreenTip:=" - Click here to follow the hyperlink", _
TextToDisplay:="Click Here"
End Sub
答案 5 :(得分:0)
而不是写
=CONCATENATE("Toto";"Tata")
将Toto
放在单元格Z1中(例如)和单元格Z2中的Tata
并写入
=CONCATENATE(Z1;Z2)
答案 6 :(得分:0)
伙计我认为URL缩短VBA会对你有所帮助。这是我今天发现的一个。它就像一个魅力: http://www.jpsoftwaretech.com/shorten-urls-with-bit-ly-web-api-and-vba/
答案 7 :(得分:0)
超链接功能有一个难以超出的硬限制。我有一个类似的问题,我只是将Excel表格导入Open Office Calc并且瞧 - 一切都立即工作,而且以前很久的超链接现在只要我想要它就可以了。
答案 8 :(得分:0)
您可以使用VBA Shell()例程来执行浏览器,并在通过Shell()调用传递的命令行上将URL传递给它。因此,URL可以是shell机制支持的任何长度。
此外,您可以通过让用户双击该单元格从任何单元格值获取此URL。可以通过单个CONCATENATE()函数调用从许多单元格构造此值!没错:只需一个电话。 CONCATENATE()将获取大量参数,并将创建一个大于255个字符的字符串。您不需要费力地加入许多单独的连接或使用负载的#34; builder&#34;细胞。一个会做!
当您右键单击工作表底部的选项卡时,需要通过打开VIEW CODE选项来创建宏。然后写下以下非常简短,简单且无痛的代码:
private typealias CCHmac = @convention(c) (
_ algorithm: CUnsignedInt,
_ key: UnsafePointer<CUnsignedChar>,
_ keyLength: CUnsignedLong,
_ data: UnsafePointer<CUnsignedChar>,
_ dataLength: CUnsignedLong,
_ macOut: UnsafeMutablePointer<CUnsignedChar>
) -> Void
请注意&#34;浏览器&#34;是一个命名单元格,应包含浏览器的未加引号的路径,即IE,Opera,Mozilla或Chrome。您必须自己命名单元格,或更改宏以具有类似&#34; A2&#34;的硬单元格引用。当然,该单元格值必须是有效的浏览器路径!
完成所有这些后,您可以双击任何具有以文本&#34; HTTP://&#34;开头的值的单元格。和Excel将打开具有该完整值的浏览器,无论它有多长。您需要的只是在该单元格中构建您的字符串,并且可能将其格式化为颜色/字体,以明确它是要双击的超链接单元格。附近的文字提示也可能是有序的!
顺便提一下,宏中Shell()行的替代方法是:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Selection.Count = 1 Then
If Left(Target.Value, 7) = "HTTP://" Then
Cancel = True
Shell ("""" + Range("Browser").Value + """" + " " + """" + Target.Value + """")
End If
End If
End Sub
虽然这也会处理大于255个字符的网址,但我发现此FollowHyperlink()函数会导致URL被发送为TWICE。一旦通过Excel函数本身(可能是为了测试它),然后再由Excel打开的默认浏览器!这可能并不可取(在我的情况下也不是这样)。这就是我最终使用Shell()函数的原因。
答案 9 :(得分:0)
您可以在Microsoft Word中创建超链接,然后将其复制到Excel。
由于某些原因,这些超链接元素不受255个字符的限制,但是您将无法使用HYPERLINK()
函数。
答案 10 :(得分:0)
假设您没有很多> 255个字符的超链接URL,只需使用链接功能。链接功能可从右键菜单中获得。无需转到Word或任何其他MSOffice应用程序。 我知道此方法有效,因为我有一个281个字符长的URL,并且一个有效。 我的工作表中只有两个非常长的URL,所以当/如果它们需要更新时,我要指出,它们必须在目标单元格而不是我的超链接地址表中完成。
答案 11 :(得分:0)
除去 Andreas J's answer,您可以使用以下 VBA 代码片段从一列纯文本 URI 生成一列超链接。假设 A 列包含纯文本 URI,B 列包含所需的链接文本,以下代码循环遍历 Range("A:C")
中的每一行并在 C 列中生成超链接:
Sub createLink(a As Range, b As Range, c As Range)
Dim curCell As Range
Dim longHyperlink As String
Dim linkText As String
Set curCell = a
longHyperlink = b
linkText = c
curCell.Hyperlinks.Add Anchor:=curCell, _
Address:=longHyperlink, _
SubAddress:="", _
ScreenTip:="", _
TextToDisplay:=linkText
End Sub
Sub insertLinks()
Dim a As Range, b As Range
Set a = Range("A:C")
For Each b In a.Rows
Dim curCell As Range, longHyperlink As Range, linkText As Range
Set curCell = b.Cells().Item(1, 3)
Set longHyperlink = b.Cells().Item(1, 1)
Set linkText = b.Cells().Item(1, 2)
If longHyperlink = "" Then
Exit For
End If
createLink curCell, longHyperlink, linkText
Next
End Sub