Building on Mick's answer:
function returnRangeStr(){
return SpreadsheetApp.getActiveSpreadsheet().getNamedRanges()[0].getName();
}
It does work, but some looping and checking might be required.
Similar is
function returnRangeName(rangeName) {
return SpreadsheetApp.getActiveSpreadsheet().getNamedRanges()[rangeName].getName();
}
So calling '=returnRangeName(0)' will return first named range on the list.
The closest I can get is
function returnRangeName(rangeName) {
var allNamedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
for(var i = 0; i < allNamedRanges.length; i++) {
if(allNamedRanges[i].getName() == rangeName) {
return allNamedRanges[i].getName();
}
}
}
Calling =returnRangeName("apple_log")
should return string 'apple_log'. After collecting named ranges, it should be fairly simple to loop through them and check only for ones that end with '_log' and return .getName() of those vertically or horizontally.
There's another way to loop trough named ranges and spit out only those that end with a specific pattern (like '_log'):
function returnRangeName(pattern) {
var allNamedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
var returnThis = new Array();
for(var i = 0; i < allNamedRanges.length; i++) {
if(allNamedRanges[i].getName().substr(allNamedRanges[i].getName().length - pattern.length) == pattern) {
// define cell in which to write 'allNamedRanges[i].getName();
returnThis.push(allNamedRanges[i].getName());
}
}
return returnThis;
}
Call it like this: =returnRangeName("_log")
. You don't need to return it all at once, you could return every match to a different cell, but then you need to adjust this function. Hope this will be useful to someone.