Найти в Дзене

Вычисляем сумму значений в диапазоне по цветам


Использовать цвет заливки ячейки в качестве отличительного признака данных не самый лучший подход, но бывает так, что без этого не обойтись.

Для решения этой задачи будем использовать кастомную функцию =SUMCOLORS(), которая находится в редакторе скриптов.
Показываем, как с её помощью посчитать сумму всех значений в диапазоне Таблицы в ячейках соответствующих цветов, например сумму всех зелёных и сумму всех красных.

Вот как она выглядит:
=SUMCOLORS("A5:A7";"D16:H21")

Как использовать: Скопировать код в редактор скриптов Таблицы и вызвать из поля формул.

код:
/**
* Считает сумму значений в ячейках по цветам
* @param {"A5:A7"} colorCellsA1 столбец с цветами, сумму по которым нужно посчитать
* @param {"D16:H23"} rangeA1 диапазон для суммирования
* @customfunction
*/
function SUMCOLORS(colorCellsA1, rangeA1) {
const colors = SpreadsheetApp.getActiveSheet().getRange(colorCellsA1)
.getBackgrounds().map(row => row[0]);
const range = SpreadsheetApp.getActiveSheet().getRange(rangeA1);
const values = range.getValues();
const sums = range.getBackgrounds().reduce((p, row, i) => {
row.forEach((cell, j) => {
if (!Object.prototype.hasOwnProperty.call(p, cell)) {
p[cell] = 0
}
p[cell] += Number(values[i][j]) || 0;
})
return p;
}, {});
return colors.map(color => [sums[color] || 0]);
}

Раздел: #скрипты
Формулы: #customfunction

Становись умнее и дороже с чатом и каналом про автоматизацию и Таблицы

#решения #сумма_по_цветам
1 минута