Can I use an excel formula to extract the link location of a hyperlink in a cell?

49

15

I have a spreadsheet with a large number of cells containing hyperlinks with display text different than the hyperlink location

ie:

cell location: A1

display text = "Site Info"

hyperlink location = "http://www.mylocation.com"

Is there an excel formula that allows me to access the text string of the hyperlink location?

Ideally it would look like this:

FORMULA(A1) = "http://www.mylocation.com"

Gigamosh57

Posted 2013-05-08T23:44:33.550

Reputation:

1Actual hyperlinks (Insert>>Hyperlink) or hyperlinks using =HYPERLINK() ? – None – 2013-05-09T00:06:04.553

Does it have to be a formula? There are lots of VBA solutions. – CharlieRB – 2013-05-09T14:03:57.670

Answers

55

You can use a macro:

  • Open up a new workbook.
  • Get into VBA (Press Alt+F11)
  • Insert a new module (Insert > Module)
  • Copy and Paste the Excel user defined function below
  • Get out of VBA (Press Alt+Q)
  • Use this syntax for this custom Excel function: =GetURL(cell,[default_value])

     Function GetURL(cell As range, Optional default_value As Variant)
     'Lists the Hyperlink Address for a Given Cell
     'If cell does not contain a hyperlink, return default_value
          If (cell.range("A1").Hyperlinks.Count <> 1) Then
              GetURL = default_value
          Else
              GetURL = cell.range("A1").Hyperlinks(1).Address
          End If
    End Function
    

Igor O

Posted 2013-05-08T23:44:33.550

Reputation: 651

If your hyperlink includes a document fragment (eg, #something), that is stored in the SubAddress, so you will need to concatenate Address, "#", and SubAddress. – gilly3 – 2018-03-19T00:05:03.530

Since parameter cell is a range object it can contain more than one cell. Range("A1") could be rewritten as Cells(1). It instructs the function to only consider the first cell in parameter cell. – ChrisB – 2018-06-22T00:40:33.970

Thank you so much! That worked better than in Google Sheets (which is rare case lol:) Important things to not forget: save Excel file as a Macro enabled workbook; Insert formula in new module (not in sheet or workbook code); name of function is case sensitive. – Liker777 – 2020-01-29T19:40:20.213

5@igor Why are you using "range("a1") in cell.range("A1").Hyperlinks.Count and cell.range("A1").Hyperlinks(1).Address ? I've copied your macro but took it out (-->cell.hyperlinks.count and cell.hyperlinks(1).adress) and it works perfectly. I'm curious on the purpose of the "range("a1") here. – P. O. – 2013-05-09T17:11:03.173

This suppose to treat if there are multiple links inside the hyperlink. it was just an idea, great it worked with your adjustments. :) – Igor O – 2013-05-09T17:22:42.360

22

I only needed to extract the address from a single cell's value so I found this small function handy:

Instead of a "brute force" macro, you could also create a user-defined function that would extract and return the URL for any hyperlink at which it was pointed:

Function GetURL(rng As Range) As String
     On Error Resume Next
     GetURL = rng.Hyperlinks(1).Address 
End Function

In this case you can place it where you want. If you want, for example, the URL from a hyperlink in A1 to be listed in cell C25, then in cell C25 you would enter the following formula:

=GetURL(A1)

http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html

Matthew Lock

Posted 2013-05-08T23:44:33.550

Reputation: 4 254

2

function EXTRACT_URL(input) {

  var range = SpreadsheetApp.getActiveSheet().getRange(input);
  var re = /^.+?\(\"(.+?)\",.+?$/;
  if (input.indexOf(':') != -1) {
    var formulas = range.getFormulas();
    for (var i in formulas) {
      for (var j in formulas[i]) {
        formulas[i][j] = formulas[i][j].replace(re, "$1");
      }
    }
    return formulas;
  } else {
    return range.getFormula().replace(re, "$1");
  }

}

Isaac Tanner-Dempsey

Posted 2013-05-08T23:44:33.550

Reputation: 21

In other that leave off the quote marks pass in the cell reference by using this in the spreadsheet =EXTRACT_URL(ADDRESS(row(A4),1,4)) . Otherwise you have to hardcode the range reference. Then you can copy this function from one cell to another. – Walker Rowe – 2019-06-14T11:41:16.887