Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

864
Views
Google Sheets Script para contar celdas con color con varios criterios

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; };
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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

Corrección de su guión:

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

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!