Cálculo de células sombreadas

10

Estou usando o Google Spreadsheets para criar uma matriz (horário / atividade) como uma programação diária para a equipe fazer login.

Existe uma fórmula para calcular o número de células em uma coluna sombreadas (ou não sombreadas) de uma determinada cor?

Por exemplo: 20 das células são cinza e 31 não são cinza (sombreadas com qualquer outra cor) e, em vez de contá-las manualmente, calcula isso na parte inferior da coluna de alcance.

salgire
fonte
O problema com a solução do @ w0lf vem do cache. A função não está pronta para receber atualizações ao vivo. Tentei obter essa capacidade adicionando "now ()" como um parâmetro extra, mas não funcionou.
calor
Eu não posso responder, então vou deixar um comentário. Se as células não tiverem texto, é mais fácil adicionar texto com a mesma cor do plano de fundo (para que fique oculto) e basta fazer um simples = counta () para contar as células não vazias. Se claro, isso é muito específico, dependendo do caso.
sfratini 20/02

Respostas:

17

Eu encontrei uma maneira de fazer isso, usando a funcionalidade de script fornecida pelo Google Spreadsheet.

Veja como fazê-lo:

  • abra sua planilha
  • no menu, vá em Ferramentas -> Editor de scripts ...; isso abrirá uma nova janela que permite inserir código
  • copie o código abaixo
  • cole o código na janela Script Editor e pressione CTRL+ Spara salvá-lo
  • feche as janelas do editor de scripts e volte para a planilha

Código:

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;
}

Após seguir as etapas acima, você tem mais três funções disponíveis na planilha:

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

Observe que <range specification>e <cell specification>são expressos na notação A1 e devem estar entre aspas .

Por exemplo, para obter a contagem de todas as células no intervalo B2: F13 que têm a cor de fundo definida como branca , insira a seguinte fórmula:

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

e para calcular a soma das mesmas células, use a fórmula:

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

Algumas células podem não ter o plano de fundo definido com uma cor como 'branco', 'cinza', mas com uma cor RGB #6fa8dc. Você não pode adivinhar qual é a cor; portanto, se quiser descobrir a cor de uma célula (por exemplo B9), insira esta fórmula em uma célula:

=getBackgroundColor("B9")

e depois use esse valor como parâmetro para as duas funções acima.

Parece que se a cor de plano de fundo de uma célula for uma "cor do tema", getBackground()sempre retornará incorretamente #ffffff. Eu não encontrei uma maneira de contornar isso além de usar uma cor do conjunto padrão.

Novamente, observe as aspas em todos os exemplos acima; sem eles, as fórmulas não funcionariam.

Cristian Lupascu
fonte
Eu tenho tentado seguir suas dicas, mas no campo eu uso a fórmula que eu recebo #NUM !, você sabe por que isso? Tentei fazer alguma pesquisa, mas não consegui encontrar a resposta exata para isso. Obrigado, um milhão, dami
@Dami, você pode postar sua fórmula aqui? Além disso, verifique a ortografia - Eu acho que os nomes de fórmulas são sensíveis
Cristian Lupascu
Ficando apenas um zero aqui, apesar de seguir as instruções ...
O getBackgroundColor()está obsoleto. Talvez você possa atualizar o código?
Jacob Jan Tuinstra
Quando altero a cor do plano de fundo para outro valor, a soma não é atualizada. Existe uma maneira de atualizar automaticamente a soma quando eu fizer algumas alterações?
Michal Kováč
0

Não encontrei uma maneira de contar diretamente as células com uma cor específica no Google Docs.

O que os torna sombreados. É automático? Se eles tiverem um valor, eles serão sombreados automaticamente? Se for esse o caso, você pode usar a função counta () para contar qualquer célula com um valor. Se houver um conjunto mais complexo de regras envolvidas, você poderá precisar usar a função countif ().

Nota: pode ser necessário levar em consideração qualquer linha extra na parte superior ou inferior da coluna

mhoran_psprep
fonte