Нужно суммировать цифры из ячеек, при этом игнорировать ячейки красного цвета, в Google Sheets
Есть таблица для подсчета данных, в которой обычные ячейки (белые) суммируются в конце строки, а красные должны игнорироваться Посидев над задачей, я написал такой код в Apps Script:
function sumWithoutRed(range) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange("range");
var values = range.getValues();
var backgrounds = range.getBackgrounds();
var sum = 0;
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (backgrounds[i][j] != '##800080') {
sum += parseFloat(values[i][j]) || 0;
}
}
}
return sum;
}
При этом нужно учитывать, что листов с данными много, в каждом из них должна применяться эта функция, местоположение ячеек меняется.
var range = sheet.getRange("range");
Я понимаю, что вместо range
нужно написать диапазон ячеек, но это мне не подходит, так как ячейки, из листа в лист, меняют свое положение.
Главный вопрос: Как мне решить проблему с ячейками, чтобы код был гибким?
Пример работы функции в самой таблице:
Ответы (1 шт):
Чтобы правильно ответить на ваш запрос нужно несколько уточнений:
- sumWithoutRed(range) - это должна быть пользовательская функция. Правильно я понимаю? Или это функция, которая будет использоваться внутри скрипта. (по вашему примеру - это больше похоже на функцию для внутреннего использования в скрипте)
- Суммируется диапазон в виде столбца с ячейками разного цвета, или диапазон в виде матрицы с ячейками разного цвета (по вашему примеру - это матрица).
Почему бы вместо конструкции For...For не использовать конструкции:
- REDUCE...MAP или
- REDUCE...REDUCE