Cálculo de celdas sombreadas

10

Estoy usando las hojas de cálculo de Google para crear una matriz (tiempo / actividad) como un horario diario para que el personal inicie sesión.

¿Existe una fórmula para calcular el número de celdas en una columna que están sombreadas (o no sombreadas) de un color determinado?

Por ejemplo: 20 de las celdas son grises y 31 no son grises (sombreadas de cualquier otro color) y en lugar de contarlas manualmente, calcula esto en la parte inferior de la columna de alcance.

salgire
fuente
El problema con la solución de @ w0lf proviene del caché. La función no está lista para recibir actualizaciones en vivo. Traté de obtener esa habilidad agregando "now ()" como parámetro adicional, pero no funcionó.
calidez
No puedo responder, así que solo dejaré un comentario. Si las celdas no tienen texto, es más fácil agregar cualquier texto dentro con el mismo color que el fondo (por lo que está oculto) y luego simplemente hace un simple = counta () para contar las celdas no vacías. Si, por supuesto, esto es muy específico dependiendo del caso.
sfratini

Respuestas:

17

He encontrado una manera de hacer esto, utilizando la funcionalidad de secuencias de comandos que proporciona la hoja de cálculo de Google.

Aquí se explica cómo hacerlo:

  • abre tu hoja de cálculo
  • en el menú, vaya a Herramientas -> Editor de secuencias de comandos ...; esto abrirá una nueva ventana que le permite ingresar el código
  • copia el siguiente código
  • pegue el código en la ventana del Editor de secuencias de comandos y presione CTRL+ Spara guardarlo
  • cierre las ventanas del editor de Script y regrese a la hoja de cálculo

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

Después de seguir los pasos anteriores, tiene tres funciones más disponibles en la hoja de cálculo:

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

Tenga en cuenta que <range specification>y <cell specification>se expresan en notación A1 , y deben ir entre comillas .

Por ejemplo, para obtener el recuento de todas las celdas en el rango B2: F13 que tienen el color de fondo establecido en blanco , debe ingresar la siguiente fórmula:

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

y para calcular la suma de las mismas celdas, use la fórmula:

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

Es posible que algunas celdas no tengan el fondo establecido en un color como 'blanco', 'gris', sino en un color RGB similar #6fa8dc. No puede adivinar cuál es el color, por lo que si desea averiguar el color de una celda (por ejemplo B9), debe ingresar esta fórmula en una celda:

=getBackgroundColor("B9")

y luego use este valor como parámetro para las dos funciones anteriores.

Parece que si el color de fondo de una celda es un "color de tema", getBackground()siempre se devuelve incorrectamente #ffffff. No he encontrado una forma de evitar esto que no sea usar un color del conjunto estándar.

Nuevamente, tenga en cuenta las citas en todos los ejemplos anteriores; sin ellos, las fórmulas no funcionarían.

Cristian Lupascu
fuente
He estado tratando de seguir tus consejos, pero en el campo utilizo la fórmula ¡Recibo #NUM !, ¿sabes por qué es eso? Traté de investigar un poco, pero no pude encontrar la respuesta exacta para eso. Un millón de gracias, dami
@Dami, ¿puedes publicar tu fórmula aquí? Además, revise la ortografía - Creo que los nombres de las fórmulas distinguen entre mayúsculas y minúsculas
Cristian Lupascu
Obteniendo un cero aquí, a pesar de seguir las instrucciones ...
El getBackgroundColor()está en desuso. ¿Quizás puedas actualizar el código?
Jacob Jan Tuinstra
Cuando cambio el color de fondo a otro valor, la suma no se actualiza. ¿Hay alguna forma de actualizar automáticamente la suma cuando hago algunos cambios?
Michal Kováč
0

No he encontrado una manera de contar directamente las celdas con un color específico en Google Docs.

Lo que los hace sombreados. ¿Es automático? Si tienen un valor, ¿se sombrean automáticamente? Si ese es el caso, puede usar la función counta () para contar cualquier celda con un valor. Si hay un conjunto de reglas más complejo, es posible que deba usar la función countif ().

Nota: puede que tenga que tener en cuenta las filas adicionales en la parte superior o inferior de la columna

mhoran_psprep
fuente