Te invito a revisar esta breve Guía sobre Suma de Celdas por COLOR en Google Sheets en la cual se ofrece una solución mediante una función definida por el usuario o UDF , la cual ha sido creada a partir de Google apps script.
Revisa el vídeo
/**
* Búsqueda de color de fondo un rango.-
* extrae el color de fondo de un rango de celdas , es decir su valor hexadecimal,
* ejemplo =ArrayColFondo("A2:A10");
* @param {A2:A10} rango el rango en string o cadena. "A2:A10", si no es string(texto),FALLARA 😥;
* @return el valor Hexadecimal del color de fondo de la celda.
*
* @customfunction
*/
//function ArrayColFondo(){
function ArrayColFondo(rango){
let ss = SpreadsheetApp.getActive().getActiveSheet();
// Asegurarse de que rangoNotacionA1 sea una cadena
if (typeof rango !== 'string') {
throw new Error("ArrayColFondo espera un string con la notación A1 del rango (ej. 'B2:B11').");
}
let matColor = ss.getRange(rango).getBackgrounds();
return matColor;
}
/**
* SUMA por el color de fondo una rango.-
* Suma los datos que corresonde a un mismo color de fondo de un rango de celdas , es decir su valor hexadecimal,
* 1).- el primer argumento es precisamente el color de fondo en hexadecimal a buscar en el rango de celdas
* 2).- el segundo argumento es el rango donde se buscara el color de fondo y los datos que se sumaran
* Ejemplo =SUMCELDASPORCOLOR("B2","A2:A10");
* @param {B2} celda La celda o en string o cadena, donde esta el valor hexadecimal o color. "B2", si no es string(texto),FALLARA 😥;
* @param {A2:A10} rango el rango en string o cadena. "A2:A10", si no es string(texto),FALLARA 😥;
* @return La suma de valores que coinciden con el valor Hexadecimal del color de fondo .
*
* @customfunction
*/
function sumCeldasPorColor(celda,rango){
let ss = SpreadsheetApp.getActive();
let hoja = ss.getActiveSheet();
if (typeof celda !== 'string' || typeof rango !== 'string') {
throw new Error("Suma Celdas Por Color espera un string con la notación A1 del rango (ej. 'B2:B11').");
}
let cf = hoja.getRange(celda).getBackground() ;Logger.log(cf);//rango o hexadecimal
let colsF = ArrayColFondo(rango); Logger.log(colsF);
let rngVal = hoja.getRange(rango).getValues(); Logger.log(rngVal);
let suma = 0;
colsF.forEach(function(c,i){ //c= celda; v= valor
if(cf === c.toString()){ suma += Number(rngVal[i]);Logger.log(suma);}
})
return suma;
}
O tal ve prefieras crear una copia para probarlo de forma más rápida 😉
Aunque yo te recomiendo que escribas el código desde cero , o al menos lo copies y lo revises para que te familiarices con los métodos de apps script 😎
En fin, la decisión es tuya ;)
Nota: si vas a usar el botón para crear tu copia debes asegurarte que estés logueado o autenticado con tu cuenta de Gmail y de preferencia tengas tu Google Drive activo en otra pagina web, de lo contrario tendrás problemas para crear tu copia. 🤷♂️
Te pude interesar:
🔥 Como extraer el código explicado en un video Tutorial de apps script de YouTube ✨
o el siguiente video 👇
síguenos en: