Обчислення затінених клітин


10

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

Чи є формула для обчислення кількості комірок у стовпчику, зафарбованим (або не затіненим) певним кольором?

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


Проблема з рішенням @ w0lf виникає з кешу. Функція не готова отримувати актуальні оновлення. Я спробував завоювати цю здатність, додавши "зараз ()" як додатковий параметр, але це не вийшло.
тепло

Я не можу відповісти, тому просто залишу коментар. Якщо в клітинках немає тексту, то простіше додати будь-який текст всередині того ж кольору, що і фон (таким чином він прихований), і тоді ви просто зробите простий = countta () для підрахунку непорожніх комірок. Якщо звичайно, це дуже конкретно, залежно від конкретного випадку.
sfratini

Відповіді:


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.

Що робить їх затіненими. Це автоматично? Якщо вони мають значення, вони автоматично затінюються? У такому випадку ви можете використовувати функцію countta () для підрахунку будь-якої комірки зі значенням. Якщо існує більш складний набір правил, можливо, вам доведеться скористатися функцією countif ().

Примітка. Можливо, вам доведеться враховувати будь-які додаткові рядки вгорі або внизу стовпця

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.