How to extract URL from Link in Google Sheets using a formula?
After some update in 2020 all codes I have found on the Internet were broken, so here is my contribution:
/**
* Returns the URL of a hyperlinked cell, if it's entered with control + k.
* Author: @Frederico Schardong based on https://support.google.com/docs/thread/28558721?hl=en&msgid=28927581 and https://github.com/andrebradshaw/utilities/blob/master/google_apps/convertHiddenLinks.gs
* Supports ranges
*/
function linkURL(reference) {
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
var formulas = range.getRichTextValues();
var output = [];
for (var i = 0; i < formulas.length; i++) {
var row = [];
for (var j = 0; j < formulas[0].length; j++) {
row.push(formulas[i][j].getLinkUrl());
}
output.push(row);
}
return output
}
If your hyperlink is specified in another cell as a formula—for example let's suppose that cell A1 contains the formula =HYPERLINK("https://www.wikipedia.org/","Wikipedia")
, you can extract the Link text using a regular expression. All you need to do is:
=REGEXEXTRACT(FORMULATEXT(A1),"""(.+)"",")
This formula will yield the result:
https://www.wikipedia.org/
No custom functions required.
This can be done for links auto created by pasting them in or with the button by going to Tools -> Script editor and creating the following script:
function GETLINK(input){ return SpreadsheetApp.getActiveSheet().getRange(input).getRichTextValue().getLinkUrl(); }
If cell A1 has the link you will need to reference it as =GETLINK("A1")
That's not going to update dynamically if you have a lot of links so use =GETLINK(cell("Address",A1))
to get around that.
Credit to morrisjr1989 on reddit.