Расчет затененных клеток

10

Я использую таблицы Google для создания матрицы (время / активность) в качестве ежедневного расписания, в которое сотрудники могут входить.

Существует ли формула для расчета количества ячеек в столбце, которые затенены (или не затенены) определенного цвета?

Например: 20 из ячеек серого цвета, а 31 - не серого цвета (закрашены любым другим цветом), и вместо того, чтобы подсчитывать их вручную, он вычисляет это в нижней части столбца досягаемости.

salgire
источник
Проблема с решением @ w0lf исходит из кеша. Функция не готова к получению актуальных обновлений. Я пытался получить эту способность, добавив «now ()» в качестве дополнительного параметра, но это не сработало.
тепло
Я не могу ответить, поэтому я просто оставлю комментарий. Если в ячейках нет текста, проще добавить любой текст внутри того же цвета, что и фон (поэтому он скрыт), и тогда вы просто делаете простой = counta () для подсчета непустых ячеек. Если конечно это очень специфично в зависимости от случая.
Сфратини

Ответы:

17

Я нашел способ сделать это, используя функции сценариев, которые предоставляет Google Spreadsheet.

Вот как это сделать:

  • откройте свою таблицу
  • в меню зайдите в Сервис -> Редактор скриптов ...; это откроет новое окно, которое позволяет вам ввести код
  • скопируйте код ниже
  • вставьте код в окно редактора скриптов и нажмите CTRL+, Sчтобы сохранить его
  • закройте окна редактора скриптов и вернитесь к электронной таблице

Код:

function getBackgroundColor(rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange(rangeSpecification);
  return cell.getBackground();
}

function sumWhereBackgroundColorIs(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x += parseFloat(cell.getValue());
    }
  }
  return x;
}

function countCellsWithBackgroundColor(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x++;
    }
  }
  return x;
}

После выполнения вышеуказанных шагов у вас есть еще три функции в электронной таблице:

  • countCellsWithBackgroundColor(<color>, <range specification>)
  • sumWhereBackgroundColorIs(<color>, <range specification>)
  • getBackgroundColor(<cell specification>)

Обратите внимание, что <range specification>и <cell specification>выражены в обозначении A1 , и должны быть заключены в кавычки .

Например, чтобы получить количество всех ячеек в диапазоне B2: F13, для которых цвет фона установлен на белый , необходимо ввести следующую формулу:

=countCellsWithBackgroundColor("white", "B2:F13")

и для вычисления суммы одинаковых ячеек используйте формулу:

=sumWhereBackgroundColorIs("white", "B2:F13")

Для некоторых ячеек цвет фона может быть не таким, как «белый», «серый», а цвет RGB #6fa8dc. Вы не можете угадать, какой цвет, поэтому, если вы хотите узнать цвет для ячейки (например, B9), вы должны ввести эту формулу в ячейку:

=getBackgroundColor("B9")

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

Похоже, что если цвет фона ячейки - «цвет темы», он getBackground()всегда возвращается неверно #ffffff. Я не нашел другого выхода, кроме как использовать цвет из стандартного набора.

Опять же, обратите внимание на цитаты во всех приведенных выше примерах; без них формулы не сработали бы.

Кристиан Лупаску
источник
Я пытался следовать вашим подсказкам, но в поле я использую формулу, которую я получаю #NUM !, вы знаете, почему это так? Я пытался провести какое-то исследование, но не смог найти точного ответа на это. Спасибо миллион,
@Dami, ты можешь опубликовать здесь свою формулу? Кроме того, проверьте правильность написания - я думаю, что имена формул чувствительны к регистру
Кристиан Лупаску
Получая здесь только ноль, несмотря на следование инструкциям ...
Не getBackgroundColor()рекомендуется. Возможно, вы можете обновить код?
Джейкоб Ян Туинстра
Когда я изменяю цвет фона на другое значение, сумма не обновляется. Есть ли способ автоматически обновлять сумму, когда я делаю некоторые изменения?
Михал Ковач
0

Я не нашел способа прямого подсчета ячеек с определенным цветом в Документах Google.

Что делает их в тени. Это автоматически? Если они имеют значение, они автоматически закрашены? В этом случае вы можете использовать функцию counta () для подсчета любой ячейки со значением. Если задействован более сложный набор правил, вам может потребоваться использовать функцию countif ().

Примечание. Возможно, вам придется учитывать любые дополнительные строки в верхней или нижней части столбца.

mhoran_psprep
источник