En una tabla de Google Sheets, uso un script que me permite contar las celdas en color en una columna que muestra las fechas como valores. Cada fecha de más de 11 días está coloreada en rojo y mi guión funciona muy bien.
En otra columna indico el nombre de cada vendedor. Lo que me gustaría es poder contar el número de glóbulos rojos que le pertenecen a cada vendedor.
La columna de la fecha es la columna "G" y la columna del vendedor es la columna "F" (En mi script no importa porque indico en qué columna contar).
Mi hoja:
https://docs.google.com/spreadsheets/d/1BFd57xpFOJMOAjuRaiO6_cLCMMxQKDwi_TB6dOCDb9A/edit#gid=0
La fórmula para mi script es:
=CompteCouleurs($G6:$G;C4)"$G6:$G" es el rango a contar "C4" es la muestra del color a buscar
Mi guion es:
function SommeCouleurs(plage,couleur) { var activeRange = SpreadsheetApp.getActiveRange(); var activeSheet = activeRange.getSheet(); var formule = activeRange.getFormula(); var laplage = formule.match(/\((.*)\;/).pop(); var range = activeSheet.getRange(laplage); var bg = range.getBackgrounds(); var values = range.getValues(); var lacouleur = formule.match(/\;(.*)\)/).pop(); var colorCell = activeSheet.getRange(lacouleur); var color = colorCell.getBackground(); var total = 0; for(var i=0;i<bg.length;i++) for(var j=0;j<bg[0].length;j++) if( bg[i][j] == color ) total=total+(values[i][j]*1); return total; }; function CompteCouleurs(plage,couleur) { var activeRange = SpreadsheetApp.getActiveRange(); var activeSheet = activeRange.getSheet(); var formule = activeRange.getFormula(); var laplage = formule.match(/\((.*)\;/).pop(); var range = activeSheet.getRange(laplage); var bg = range.getBackgrounds(); var values = range.getValues(); var lacouleur = formule.match(/\;(.*)\)/).pop(); var colorCell = activeSheet.getRange(lacouleur); var color = colorCell.getBackground(); var count = 0; for(var i=0;i<bg.length;i++) for(var j=0;j<bg[0].length;j++) if( bg[i][j] == color ) count=count+1; return count; };Primero, expanda su área a G y F =CompteCouleurs($F6:$G;C4)
Luego, como solo tiene en cuenta la columna G, puede omitir for(var j=0;j<bg[0].length;j++)
Por lo tanto, puede verificar el color en G y el vendedor en F de la siguiente manera if( bg[i][1] == color && values[i][0] == salesman )
Si desea incluir al vendedor como parámetro, deberá cambiar la expresión regular de la siguiente manera para recuperar cada argumento (los argumentos serán una matriz)
var args = formule.match(/\(.*\)/g)[0].match(/[A-Z0-9:]+/g)Recomiendo también agregar un parámetro ficticio (casilla de verificación) para actualizar el cálculo
function compteCouleursSi(plage, couleur, vendeur) { var activeRange = SpreadsheetApp.getActiveRange(); var activeSheet = activeRange.getSheet(); var formule = activeRange.getFormula(); // array of arguments var args = formule.match(/(?<=\().*(?=\))/g)[0].split(/[;|,]/) var laplage = args[0]; if (laplage.includes('!')) { var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(laplage.split('!')[0].replace(/'/g,'')).getRange(laplage.split('!')[1].trim()); }else{ var range = activeSheet.getRange(laplage); } var bg = range.getBackgrounds(); var values = range.getValues(); var lacouleur = args[1]; var color = activeSheet.getRange(lacouleur).getBackground(); var salesman = args[2]; var who = activeSheet.getRange(salesman).getValue() var total = 0; for (var i = 0; i < bg.length; i++) if (bg[i][1] == color && values[i][0] == who) total += 1; return total; }; function sommeCouleursSi(plage, couleur, vendeur) { var activeRange = SpreadsheetApp.getActiveRange(); var activeSheet = activeRange.getSheet(); var formule = activeRange.getFormula(); // array of arguments var args = formule.match(/(?<=\().*(?=\))/g)[0].split(/[;|,]/) var laplage = args[0]; if (laplage.includes('!')) { var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(laplage.split('!')[0].replace(/'/g,'')).getRange(laplage.split('!')[1].trim()); }else{ var range = activeSheet.getRange(laplage); } var bg = range.getBackgrounds(); var values = range.getValues(); var lacouleur = args[1]; var color = activeSheet.getRange(lacouleur).getBackground(); var salesman = args[2]; var who = activeSheet.getRange(salesman).getValue() var total = 0; for (var i = 0; i < bg.length; i++) if (bg[i][1] == color && values[i][0] == who) total += values[i][1]; return total; };