- Вы хотите проверить, включена ли ячейка в названный диапазон.
- Вы хотите создать функцию
isInRange
. - Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Поток:
Поток isInRange
выглядит следующим образом.
- Получите именованные диапазоны в активный лист.
- Получить именованный диапазон, используя
myNamedRange
. - Возврат
true
, когда cell
находится в именованном диапазоне myNamedRange
. - Возврат
false
, когда cell
НЕ находится в именованном диапазоне myNamedRange
. - Ошибка возникает, когда
myNamedRange
не был найден.
Пример сценария:
function isInRange(cell, myNamedRange) {
var sheet = SpreadsheetApp.getActiveSheet();
var namedRanges = sheet.getNamedRanges();
for (var i = 0; i < namedRanges.length; i++) {
var nr = namedRanges[i];
if (nr.getName() == myNamedRange) {
var range = nr.getRange();
var startRow = range.getRow();
var endRow = startRow + range.getNumRows() - 1;
var startColumn = range.getColumn();
var endColumn = startColumn + range.getNumColumns() - 1;
return cell.getRow() >= startRow && cell.getRow() <= endRow && cell.getColumn() >= startColumn && cell.getColumn() <= endColumn;
}
}
throw new Error(myNamedRange + " was not found.");
}
- Когда этот пример сценария
isInRange
используется для вашего onEdit
, когда cell
находится в именованном диапазоне myNamedRange
, оператор if if (isInRange(cell, myNamedRange)) {}
равен true
.
Примечание:
- В этом примере сценария именованные диапазоны извлекаются из активного листа. Если вы хотите изменить это, пожалуйста, измените скрипт.
Ссылки:
Если я неправильно понял ваш вопрос, и это не то направление, в котором вы хотите, я приношу свои извинения.
Добавлено:
- Вы хотите чтобы получить диапазоны пересечения двух диапазонов.
- Например, когда именованный диапазон и введенный диапазон равны «A1: B3» и «B3: C4» соответственно, вы хотите получить «B3» в качестве диапазона пересечения.
Если мое понимание верно, как насчет этого примера сценария? Этот пример сценария выглядит следующим образом.
Поток:
- Извлечение a1Notations из «inputRange».
- Извлечение a1Notations из «myNamedRange».
- Извлечение диапазонов пересечения.
В этом примере сценария возвращаемое значение возвращает массив, включающий a1Notations. Поскольку диапазон ввода может быть не продолжен, и когда массив a1Notations можно также использовать для RangeList .
Пример сценария:
function myFunction() {
var myNamedRange = "sampleNamedRange"; // Please set the name of the named range.
var inputRange = SpreadsheetApp.getActiveSheet().getRange("B3:C4"); // Please set the range.
var columnToLetter = function(column) { // <--- https://stackoverflow.com/a/21231012/7108653
var temp, letter = '';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
};
var result = [];
var sheet = SpreadsheetApp.getActiveSheet();
var namedRanges = sheet.getNamedRanges();
for (var i = 0; i < namedRanges.length; i++) {
var nr = namedRanges[i];
if (nr.getName() == myNamedRange) {
// Retrieve a1Notations from "inputRange".
var iStartRow = inputRange.getRow();
var iEndRow = iStartRow + inputRange.getNumRows() - 1;
var iStartColumn = inputRange.getColumn();
var iEndColumn = iStartColumn + inputRange.getNumColumns() - 1;
var irA1Notations = [];
for (var j = iStartRow; j <= iEndRow; j++) {
var temp = [];
for (var k = iStartColumn; k <= iEndColumn; k++) {
temp.push(columnToLetter(k) + j);
}
Array.prototype.push.apply(irA1Notations, temp);
}
// Retrieve a1Notations from "myNamedRange".
var namedRange = nr.getRange();
var nStartRow = namedRange.getRow();
var nEndRow = nStartRow + namedRange.getNumRows() - 1;
var nStartColumn = namedRange.getColumn();
var nEndColumn = nStartColumn + namedRange.getNumColumns() - 1;
var nrA1Notations = {};
for (var j = nStartRow; j <= nEndRow; j++) {
for (var k = nStartColumn; k <= nEndColumn; k++) {
nrA1Notations[columnToLetter(k) + j] = null;
}
}
// Retrieve intersection ranges.
result = irA1Notations.filter(function(e) {return nrA1Notations.hasOwnProperty(e)});
}
}
Logger.log(result)
}