Resumen mensual ordenado cronológicamente con una sola fórmula AGRUPARPOR

Desde Lima, un miembro de la comunidad plantea un problema muy habitual: tiene datos con fechas y valores, y quiere hacer un resumen por meses ordenado de enero a diciembre, todo con una sola fórmula. Lo consigue en dos pasos pero busca la solución en uno. Comparte su fichero con los datos de ejemplo.

El problema de fondo es que AGRUPARPOR ordena el resultado alfabéticamente por defecto. Así que los meses aparecen como Abril, Agosto, Diciembre... en lugar de Enero, Febrero, Marzo. La comunidad aporta cuatro enfoques distintos.

Nacho usa APILARH con MES como columna de orden:

``
=EXCLUIR(
AGRUPARPOR(
APILARH(MES(B3:B29); TEXTO(B3:B29; "MMMM"));
C3:C29;
SUMA
);; 1
)
`

La idea clave: si necesitas que AGRUPARPOR ordene de una forma concreta, dale una columna extra que fuerce ese orden y luego elimínala con EXCLUIR.

NedNavarrete propone una versión más compacta con TEXTO y constante matricial:

`
=EXCLUIR(
AGRUPARPOR(
TEXTO(B3:B29; {"mm";"mmmm"});
C3:C29;
SUMA
);; 1
)
`

Al usar "mm" (01, 02, 03...) el orden alfabético coincide con el cronológico. Elegante y sin necesidad de APILARH ni MES.

Gerson añade una fila de total usando LET y SI:

`
=LET(
a; EXCLUIR(
AGRUPARPOR(
TEXTO(B3:B29; {"m";"mmmm"});
C3:C29;
SUMA
);; 1
);
SI(a = ""; "Total:"; a)
)
`

Aprovecha que AGRUPARPOR puede generar una fila vacía al final para insertar ahí la etiqueta "Total:".

Un cuarto enfoque radicalmente distinto: primero AGRUPARPOR genera el resultado con orden alfabético, y después SORTBY lo reordena:

`
=SORTBY(
ANCHORARRAY(J3);
VALUE(J3:J15 & "1");
1
)
`

El truco: VALUE("Enero1") devuelve el número de serie de la fecha 1 de enero, así que los meses quedan automáticamente en orden cronológico. ANCHORARRAY referencia el resultado dinámico de la fórmula AGRUPARPOR` en J3.

Cuatro caminos al mismo destino. El fichero adjunto incluye las soluciones 1, 2 y 4 implementadas para poder comparar.

El problema: AGRUPARPOR ordena alfabéticamente y los meses salen mal

Desde Lima, un miembro de la comunidad plantea algo que parece trivial: tiene una tabla con fechas e importes y quiere un resumen mensual, de enero a diciembre, con una sola fórmula. Lo consigue en dos pasos, pero busca hacerlo en uno.

El obstáculo no es agrupar, eso AGRUPARPOR lo hace de sobra. El obstáculo es el orden: AGRUPARPOR ordena el resultado alfabéticamente por la columna de agrupación. Y como el nombre del mes es texto, el resumen sale así: Abril, Agosto, Diciembre, Enero, Febrero... Correcto en los números, ilegible para cualquiera que lo mire.

La comunidad aportó cuatro caminos distintos, y merece la pena verlos todos porque cada uno enseña una técnica reutilizable.

Enfoque 1: añadir una columna que fuerce el orden

Nacho parte de la idea más general: si AGRUPARPOR ordena por la primera columna, dale una primera columna que ordene como tú quieres, y luego quítala.

=EXCLUIR(
    AGRUPARPOR(
        APILARH(MES(B3:B29); TEXTO(B3:B29; "MMMM"));
        C3:C29;
        SUMA
    );; 1
)

APILARH monta una columna de agrupación de dos campos: el número de mes y su nombre. Como el número manda en la ordenación, enero va primero. Después EXCLUIR elimina esa columna de servicio y deja solo el nombre del mes y el total.

Esta es la idea que conviene guardar: cuando una función ordena por algo que no te sirve, añade una clave de orden auxiliar y elimínala al final. Funciona muchísimo más allá de los meses.

Enfoque 2: que el texto ordene solo

NedNavarrete se da cuenta de que puede ahorrarse el APILARH y el MES con un truco de formato:

=EXCLUIR(
    AGRUPARPOR(
        TEXTO(B3:B29; {"mm";"mmmm"});
        C3:C29;
        SUMA
    );; 1
)

TEXTO acepta una matriz de formatos, así que devuelve dos columnas de una tacada: el mes en dos dígitos (01, 02, 03...) y el nombre completo. Y ahí está la gracia: con ceros a la izquierda, el orden alfabético coincide con el cronológico. "01" va antes que "02" tanto para una persona como para el ordenador.

Más corto, con menos funciones y sin perder nada. Es la versión que yo dejaría en producción.

Enfoque 3: aprovechar la fila vacía para el total

Gerson añade un detalle práctico. AGRUPARPOR puede generar una fila en blanco al final, y en vez de estorbar se puede aprovechar:

=LET(
    a; EXCLUIR(
        AGRUPARPOR(
            TEXTO(B3:B29; {"m";"mmmm"});
            C3:C29;
            SUMA
        );; 1
    );
    SI(a = ""; "Total:"; a)
)

Guarda el resultado en la variable a con LET y luego sustituye lo que esté vacío por la etiqueta "Total:". Es un buen ejemplo de por qué LET merece la pena: sin él tendrías que repetir todo el bloque de AGRUPARPOR dos veces.

Enfoque 4: agrupar primero y reordenar después

El cuarto camino invierte el planteamiento. En lugar de pelearse con el orden dentro de AGRUPARPOR, deja que salga alfabético y lo reordena por fuera:

=ORDENARPOR(
    J3#;
    VALOR(J3:J15 & "1");
    1
)

El truco está en la clave de ordenación. VALOR("Enero1") interpreta ese texto como una fecha, el 1 de enero, y devuelve su número de serie. Al hacerlo con cada mes, obtienes automáticamente 12 números en orden cronológico. Excel ordena por esos números y listo.

El J3# con la almohadilla es el operador de derrame: apunta al resultado dinámico completo de la fórmula AGRUPARPOR que vive en J3, sin tener que saber cuántas filas ocupa.

Funciones clave

  • AGRUPARPOR — agrupa y agrega en una sola fórmula. Ordena por la columna de agrupación, y eso es exactamente lo que hay que domar aquí.
  • TEXTO — con una matriz de formatos devuelve varias columnas a la vez. La clave del enfoque 2.
  • EXCLUIR — elimina filas o columnas del resultado. Perfecto para quitar la columna de orden auxiliar.
  • LET — guarda un resultado en una variable para reutilizarlo sin recalcularlo.
  • ORDENARPOR — ordena una matriz según otra matriz de claves, que pueden ser calculadas.
  • El operador de derrame (almohadilla) — referencia el resultado completo de una fórmula dinámica sin fijar su tamaño.

Conclusión

Cuatro soluciones al mismo problema, y ninguna es la "buena" en abstracto. Si buscas la más corta, la de los formatos "mm" y "mmmm". Si necesitas una fila de total, la de LET. Si ya tienes el resumen calculado en otro sitio y solo quieres reordenarlo, la de ORDENARPOR.

Lo que sí se lleva uno para siempre es el patrón de fondo: el orden de un resultado agrupado se controla con la clave por la que se agrupa. Si esa clave no ordena como quieres, fabrica una que sí lo haga.

El fichero adjunto trae implementadas las soluciones 1, 2 y 4 para poder compararlas de primera mano.

Más casos con estas funciones

Más contenido de Excel en InflueXcel