Home » excel » function – Exceeding Max Char Limit in Excel

function – Exceeding Max Char Limit in Excel

Posted by: admin March 9, 2020 Leave a comment

Questions:

How do I use more than 255 characters in Excel’s CONCATENATE function? I am actually also using the CONCATENATE function within the HYPERLINK function in EXCEL. An example looks like this:

=HYPERLINK(CONCATENATE("http://www.google/com/morethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255chars","morethan255chars morethan255charsmorethan255charsmorethan255charsmorethan25"),"link");

UPDATE: It’s not issue with CONCATENATE function, but an issue with the first parameter of the HYPERLINK function. Using a string longer than 255 characters directly/indirectly (ex: =HYPERLINK(K204,”link”) where K204 contains the 256-character length link) fails the HYPERLINK function

I realize that I can use a URL shortener, but I am doing this for ALOT of links which would require ALOT of manual use of the URL shortener.

How to&Answers:

UPDATE: Because of Karls comment I revisited my answer an found out, that Excel 2007 does not seem to allow User Defined Functions to set hyperlinks anymore (quite sensibly, see my own comment in the code). So the original code (below the line) does not work in more recent versions of Excel (I haven’t tested Excel 2010 but I assume the result is the same). For historical reasons I do not delete the old code (an editor might think otherwise — feel free to edit/ delete accordingly).

So what remains is to set long hyperlinks programatically, e.g.

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

What follows does not work in Excel 2010 anymore; see my comment above

The “copy the hyperlink from Word and paste into Excel” got me thinking. So obviously the limit is both in the built-in HYPERLINK-function and in the dialog-window ‘edit hyperlink’. On the other hand it should be — and actually is — possible to set longer hyperlinks via VBA.

This code does not work in Excel 2010 anymore

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

    ' 

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

' Warning Warning Warning Warning Warning '

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

Answer:

' 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

Use as a normal Excel-function, but be sure to add the current cell as first parameter (i.e. the following formula is inserted in cell A1)

=myHyperlink(A1,B1)
=myHyperlink(A1,B1,"TextToDisplay", "ScreenTip")

You can neither pull the formula down nor copy it to another cell. If you do that you have to let the formula be recalculated (neither ALT-CTRL-F9 nor ALT-CTRL-SHIFT-F9 as force recalculate seem to work) so go into each cell, press F2 to activate it and finish with Return.

I hope I am not helping you to screw up too many Excel-Workbooks.

It is probably safer to write an VBA that is explicitly started that iterates through a list and writes to hyperlinks. That way they can reused and there are no functions.

Regards
Andreas

Answer:

You might be out of luck. It seems that the character limit for hyperlinks in Excel is 256 as pointed out here. If you test it out yourself (I have Excel 2007, too), =HYPERLINK(REPT("a",255)) works and =HYPERLINK(REPT("a",256)) does not and throws a #VALUE! error.

Answer:

I have Excel 2007 and I tried making a cell with 300 characters in A1, and another with 300 different characters in B1.

Then I made C1 = CONCATENATE(A1, B1).

I can see all of the characters from both cells. Nothing is missing or truncated and no errors were received. It looks good to me.

What makes you think that the concatenate is failing? Are you having trouble seeing your results? If your cell contains more than 1,024 characters only the first 1,024 are displayed in the cell. However they are still there and if you copy and paste them all of the characters will be copied.

Edit:
Now that you have editted your question I realize the problem is with HYPERLINK and not CONCATENATE.

The only way to get around the 255 character limit of HYPERLINK formula in Excel is to copy a hyperlink from Word and paste it into a cell in Excel. Then it can be super long. I know this is an unreasonable manual process if you have a lot of links but it seems the only way to get it into an Excel spreadsheet and yet still have it be a hyperlink that you can click on and be redirected. If you don’t need it to act like a hyperlink then I would suggest rewriting your queries to return the hyperlink as its own text field and then it will be fine.

Answer:

Here’s some VBA which uses bitly.com to shorten a URL. It is based on the bitly API documentation.

  1. Create a free account on bitly.
  2. Valid email address with bitly.
  3. Get access token from bitly.
  4. Substitute the access token in the VBA code below where it says MY_TOKEN.
  5. Copy and paste the code in Excel’s VBA.
  6. In a cell, write the following ‘=Hyperlink(GetURL(“some really long URL”))’ without single quote ‘ marks. Note: Instead of passing a string to GetURL(), pass a reference to a cell which has a URL in it as text.
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

Answer:

Dunno if my answer is still useful but I had the same issue couple of days ago, the best way and proved way to do a workable hyperlink that exceeds a 255 char limit is to first split it, with CONCATENATE(), and use the cell with CONCATENATE() function in VBA.

For me it looks like:

A1 = LinkPart1
A2 = LinkPart2
A3 = LinkPart3

A5 = CONCATENATE( A1; A2; A3 )

VBA Code you need to link with 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

Answer:

Instead of writing

=CONCATENATE("Toto";"Tata")

Put Toto in cell Z1 (for exemple) and Tata in cell Z2 and write

=CONCATENATE(Z1;Z2)

Answer:

Guys I think a URL Shortening VBA will help you. Here is one which I found today. It works like a charm:
http://www.jpsoftwaretech.com/shorten-urls-with-bit-ly-web-api-and-vba/

Answer:

The Hyperlink function has a hard limit that can’t be overstaped. I had a similar problem and I simply imported the Excel sheet into Open Office Calc and voila – everything worked instantly and the hyperlink that was to long previously can be now as long as I wanted it to be.

Answer:

You can use the VBA Shell() routine to execute a browser and pass the URL to it on the command line passed via the Shell() call. Thus the URL can be any length supported by the shell mechanism.

Furthermore you can get this URL from any cell value by having the user double-click that cell. This value can be constructed from many cells via a single CONCATENATE() function call! That’s right: just a single call. The CONCATENATE() will take a large number of parameters and will create a string well-bigger than 255 characters. You don’t need to laboriously join many separate concatenations or use loads of “builder” cells. One will do!

The macro needs to be created by opening the VIEW CODE option when you right-click the tab at the bottom of the worksheet. Then write the following phenomenally short, simple and painless bit of code:

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     

Note that “Browser” is a named cell that should contain the unquoted path of your browser, be that IE, Opera, Mozilla or Chrome. You have to name the cell yourself, or change the macro to have a hard cell reference like “A2”. And of course, that cell value must be a valid browser path!

Once you have all of this in place, you can double-click ANY cell that has a value starting with the text “HTTP://” and Excel will open the browser with that full value, no-matter how long it is. All you then need is to build your string in that cell and perhaps format it colour/font-wise to make it obvious that it is a hyperlink cell to be double-clicked. A textual hint nearby may also be in order!

Incidentally, an alternative to the Shell() line in the macro is:

ThisWorkbook.FollowHyperlink Address:=Target.Value 

Whilst this will also process URLs bigger than 255 characters, I found that this FollowHyperlink() function causes the URL to be sent TWICE. Once by the Excel function itself (presumably to test it) and then again by the default browser that Excel opens! This may not be desirable (and wasn’t in my case). This is why I ended up using the Shell() function instead.

Answer:

You can create a hyperlink in Microsoft Word, and then copy it over to Excel.
For some reason, those hyperlink elements are not limited by the 255 character limit, but you won’t be able to use the HYPERLINK() function.

Source