Aquí os pongo el código de una macro para ONLYOFFICE que cuenta casillas dependiendo de su color de fondo.
Contará las casillas según el color de la columna A a la K y pondrá el resultado en las columnas L, M y N según sean rojas, amarillas o lilas.

(function()
{
var oWorksheet = Api.GetActiveSheet();
// ==========================================
// CONFIGURACIÓN DE COLORES (HEXADECIMAL)
// ==========================================
var hex_rojo = "FF0000";
var hex_amarillo = "FFFF00";
var hex_lila = "CCC1DA";
// Función CORREGIDA a orden RGB (R*65536 + G*256 + B)
function hexToOnlyOfficeDec(hex) {
hex = hex.replace("#", "");
var r = parseInt(hex.substring(0, 2), 16);
var g = parseInt(hex.substring(2, 4), 16);
var b = parseInt(hex.substring(4, 6), 16);
return (r * 65536) + (g * 256) + b;
}
var ID_ROJO = hexToOnlyOfficeDec(hex_rojo).toString(); // Debería dar 16711680
var ID_AMARILLO = hexToOnlyOfficeDec(hex_amarillo).toString(); // Debería dar 16776960
var ID_LILA = hexToOnlyOfficeDec(hex_lila).toString(); // Debería dar 13418970
// ==========================================
// CONFIGURACIÓN DE RANGOS
// ==========================================
var filaInicio = 2;
var filaFin = 11;
var colInicio = 0; // A
var colFin = 10; // K
var colBH = 11; // L
var colBI = 12; // M
var colBJ = 13; // N
for (var f = filaInicio; f <= filaFin; f++) {
var rojos = 0, amarillos = 0, lilas = 0;
for (var c = colInicio; c <= colFin; c++) {
var oRange = oWorksheet.GetRangeByNumber(f - 1, c);
var oColor = oRange.GetFillColor();
if (oColor) {
var sColorInfo = JSON.stringify(oColor);
if (sColorInfo.indexOf(ID_ROJO) !== -1) {
rojos++;
} else if (sColorInfo.indexOf(ID_AMARILLO) !== -1) {
amarillos++;
} else if (sColorInfo.indexOf(ID_LILA) !== -1) {
lilas++;
}
}
}
oWorksheet.GetRangeByNumber(f - 1, colBH).SetValue(rojos);
oWorksheet.GetRangeByNumber(f - 1, colBI).SetValue(amarillos);
oWorksheet.GetRangeByNumber(f - 1, colBJ).SetValue(lilas);
}
})();
