Нужно суммировать цифры из ячеек, при этом игнорировать ячейки красного цвета, в 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 шт):

Автор решения: BotYourBiz

Чтобы правильно ответить на ваш запрос нужно несколько уточнений:

  1. sumWithoutRed(range) - это должна быть пользовательская функция. Правильно я понимаю? Или это функция, которая будет использоваться внутри скрипта. (по вашему примеру - это больше похоже на функцию для внутреннего использования в скрипте)
  2. Суммируется диапазон в виде столбца с ячейками разного цвета, или диапазон в виде матрицы с ячейками разного цвета (по вашему примеру - это матрица).

Почему бы вместо конструкции For...For не использовать конструкции:

  1. REDUCE...MAP или
  2. REDUCE...REDUCE
→ Ссылка