Range
You can create a link like this:
=hyperlink("#gid=1166414895range=A1", "link to A1")
Each tab has a unique key, called gid, you'll find it in the link:

#gid
will never change. Tab name may be changed and the formula will break, using gid
is safer.
A1
is a part you need to find using match
, address
functions to get dynamic links.
I could not find a documentation on this topic, and could not find a method using tab names.
Named Range
- Define a named range in the document.
- In a cell select "Insert link".
- In the link dialog box, select "Named ranges in this spreadsheet."
- Select the name of the range created in step 1.
- Click the "Apply" button.
- Move mouse pointer over the new link. A pop-up containing a link like "#rangeid=nnnnnnnnnn" will appear.
- Right click on the link in the pop-up to open your browser's contextual menu.
- Select the "Copy Link Address" or just "Copy" function.
Depending on your browser, your clipboard will now contain either the full URL:
https://docs.google.com/spreadsheets/d/xxxxxxxxxx/edit#rangeid=nnnnnnnnnn
Or the clipboard will have just the range ID fragment:
#rangeid=nnnnnnnnnn
If you have only the fragment, you'll need to append it to the URL of the document to create a complete URL for the range.
There may be some other, simpler way to get the range ID, but I've not noticed one yet. See related question, answer to a similar question.
PS: After you've copied the URL for the named range, you may delete the link that was created by following the steps above.
Custom functions
Use in a formula.
Simple range:
=HYPERLINK(getLinkByRange("Sheet1","A1"), "Link to A1")
Named range:
=HYPERLINK(getLinkByNamedRange("NamedRange"), "Link to named range")
The code, insert into the script editor (Tools > Script Editor):
function getLinkByRange(sheetName, rangeA1, fileId)
{
// file + sheet
var file = getDafaultFile_(fileId);
var sheet = file.getSheetByName(sheetName);
return getCombinedLink_(rangeA1, sheet.getSheetId(), fileId, file)
}
function getLinkByNamedRange(name, fileId)
{
// file + range + sheet
var file = getDafaultFile_(fileId);
var range = file.getRangeByName(name);
var sheet = range.getSheet();
return getCombinedLink_(range.getA1Notation(), sheet.getSheetId(), fileId, file)
}
function getDafaultFile_(fileId)
{
// get file
var file;
if (fileId) { file = SpreadsheetApp.openById(fileId); }
else file = SpreadsheetApp.getActive();
return file;
}
function getCombinedLink_(rangeA1, sheetId, fileId, file)
{
var externalPart = '';
if (fileId) { externalPart = file.getUrl(); }
return externalPart + '#gid=' + sheetId + 'range=' + rangeA1;
}