как посчитать количество ячеек определенного цвета в гугл таблицах?

Хотела использовать этот код:

function getColor(cell) {
  return cell.getBackground();
}

function isColor(cell, color) {
  return cell.getBackground() == color;
}

Но либо он не работает, либо я его неправильно сохраняю и/или развертываю. Мне нужно посчитать колиство ячеек того или иного цвета, но в основных функциях и формулах я этого не нашла. Помогите, пожалуйста.


Ответы (1 шт):

Автор решения: Дмитрий ___

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

Для решения этой задачи будем использовать кастомную функцию =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]);
}

Пример в Таблице чата

Источник решения

→ Ссылка