Calcul des cellules ombrées

10

J'utilise Google Spreadsheets pour créer une matrice (temps / activité) comme horaire quotidien auquel le personnel doit se connecter.

Existe-t-il une formule pour calculer le nombre de cellules d'une colonne qui sont ombrées (ou non ombrées) d'une certaine couleur?

Par exemple: 20 des cellules sont grises et 31 ne sont pas grises (ombrées de toute autre couleur) et au lieu de les compter manuellement, il les calcule en bas de la colonne de portée.

salgire
la source
Le problème avec la solution de @ w0lf vient du cache. La fonction n'est pas prête à recevoir des mises à jour en direct. J'ai essayé d'acquérir cette capacité en ajoutant "now ()" comme paramètre supplémentaire, mais cela n'a pas fonctionné.
chaleur
Je ne peux pas répondre donc je vais juste laisser un commentaire. Si les cellules n'ont pas de texte, il est plus facile d'ajouter du texte à l'intérieur avec la même couleur que l'arrière-plan (il est donc masqué) et vous faites simplement un simple = counta () pour compter les cellules non vides. Si c'est bien sûr très spécifique selon les cas.
sfratini

Réponses:

17

J'ai trouvé un moyen de le faire, en utilisant la fonctionnalité de script fournie par Google Spreadsheet.

Voici comment procéder:

  • ouvrez votre feuille de calcul
  • dans le menu, allez dans Tools -> Script Editor ...; cela ouvrira une nouvelle fenêtre qui vous permettra d'entrer le code
  • copiez le code ci-dessous
  • collez le code dans la fenêtre de l'éditeur de script et appuyez sur CTRL+ Spour l'enregistrer
  • fermez les fenêtres de l'éditeur de script et revenez à la feuille de calcul

Code:

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

Après avoir suivi les étapes ci-dessus, trois autres fonctions sont disponibles dans la feuille de calcul:

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

Veuillez noter que <range specification>et <cell specification>sont exprimés en notation A1 , et doivent être placés entre guillemets .

Par exemple, pour obtenir le nombre de toutes les cellules de la plage B2: F13 dont la couleur d'arrière-plan est définie sur blanc , vous devez entrer la formule suivante:

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

et pour calculer la somme des mêmes cellules, utilisez la formule:

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

Certaines cellules peuvent ne pas avoir l'arrière-plan défini sur une couleur telle que «blanc», «gris», mais une couleur RVB comme #6fa8dc. Vous ne pouvez pas deviner quelle est la couleur, donc si vous voulez connaître la couleur d'une cellule (par exemple, B9), vous devez entrer cette formule dans une cellule:

=getBackgroundColor("B9")

et ensuite utiliser cette valeur comme paramètre pour les deux fonctions ci-dessus.

Il semble que si la couleur d'arrière-plan d'une cellule est une "couleur de thème", elle getBackground()retourne toujours incorrectement #ffffff. Je n'ai pas trouvé d'autre moyen de contourner cela que d'utiliser une couleur de l'ensemble standard.

Encore une fois, notez les citations dans tous les exemples ci-dessus; sans eux, les formules ne fonctionneraient pas.

Cristian Lupascu
la source
J'ai essayé de suivre vos conseils, mais dans le domaine, j'utilise la formule que je reçois #NUM !, savez-vous pourquoi? J'ai essayé de faire des recherches, mais je n'ai pas pu trouver de réponse exacte à cela. Merci un million, dami
@Dami pouvez-vous poster votre formule ici? Vérifiez également l'orthographe - je pense que les noms des formules sont sensibles à la casse
Cristian Lupascu
Obtenir juste un zéro ici, malgré les instructions ...
Le getBackgroundColor()est obsolète. Vous pouvez peut-être mettre à jour le code?
Jacob Jan Tuinstra
Lorsque je change la couleur d'arrière-plan en une autre valeur, la somme n'est pas mise à jour. Existe-t-il un moyen de mettre à jour automatiquement la somme lorsque j'effectue des modifications?
Michal Kováč
0

Je n'ai pas trouvé de moyen de compter directement les cellules avec une couleur spécifique dans Google Docs.

Ce qui les rend ombragés. Est-ce automatique? S'ils ont une valeur, ils sont automatiquement ombrés? Si tel est le cas, vous pouvez utiliser la fonction counta () pour compter n'importe quelle cellule avec une valeur. Si un ensemble de règles plus complexe est impliqué, vous devrez peut-être utiliser la fonction countif ().

Remarque: vous devrez peut-être prendre en compte toutes les lignes supplémentaires en haut ou en bas de la colonne

mhoran_psprep
la source