Ordenar meses cronológicamente en PIVOTARPOR

Problema clásico con PIVOTARPOR: cuando los meses vienen como texto ("enero", "febrero"...), las columnas se ordenan alfabéticamente en lugar de cronológicamente. Abril aparece antes que enero, diciembre antes que febrero... un caos.

La comunidad aporta varias soluciones, cada una con su enfoque:

Truco clave: MES(1&"enero") devuelve 1 (Hugo). Al concatenar "1" delante de un nombre de mes en español, Excel lo interpreta como fecha ("1enero" = 1 de enero) y MES() extrae el número. Esta es la base de las demás soluciones.

Con APILARH para crear columna auxiliar (Alejandro): añade el número de mes como primera columna del campo de columnas para que PIVOTARPOR ordene por él:

``
=PIVOTARPOR(
campofilas;
APILARH(MES(BD_2025[Fecha Ref.]); MAYUSC(TEXTO(BD_2025[Fecha Ref.]; "mmm")));
valores;
SUMA;; 0
)
`

Con array constante en TEXTO (Gerson): la versión más elegante. Usa {"m";"mmm"} dentro de TEXTO para generar ambas columnas (número y nombre) sin necesidad de APILARH:

`
=PIVOTARPOR(
campofilas;
TEXTO("1"&campofechas; {"m";"mmm"});
valores;
SUMA;; 0;; 0
)
`

Solución completa con EXCLUIR (Leo): cuando el resultado incluye la fila/columna numérica auxiliar, se elimina con EXCLUIR para dejar solo los nombres de mes:

`
=EXCLUIR(
PIVOTARPOR(
filas;
APILARH(MES(1&meses); meses);
valores;
SUMA;; 0;; 0
);
1
)
`

Leo explica la técnica paso a paso: concatenar "1" al nombre del mes para simular una fecha, extraer el número con MES, apilarlo como primera columna para que PIVOTARPOR` ordene por él, y finalmente excluir esa columna auxiliar del resultado.

Montas un resumen con PIVOTARPOR, agrupas por mes, y el resultado sale ordenado así: abril, agosto, diciembre, enero... Alfabéticamente. Es uno de los tropiezos más comunes con las funciones de agrupación modernas, y la comunidad lo resolvió con varias fórmulas que merece la pena conocer.

Por qué pasa

PIVOTARPOR ordena los campos de columnas según su valor. Si los meses vienen como texto ("enero", "febrero"), los ordena como texto. Y en orden alfabético, abril va antes que enero.

La solución pasa por darle a la función algo numérico por lo que ordenar, sin perder el nombre legible del mes en la cabecera.

El truco de base: convertir el nombre del mes en número

Hugo aporta la pieza que sostiene todas las demás soluciones:

=MES("1"&"enero")

Al concatenar un uno delante del nombre del mes, Excel interpreta el texto resultante como una fecha real (el 1 de enero) y MES devuelve su número. Funciona con todos los meses en español, sin tabla de equivalencias ni CAMBIAR de doce ramas.

A partir de aquí, el problema es simplemente colocar ese número como campo de ordenación.

Enfoque 1: columna auxiliar con APILARH

Alejandro apila el número de mes delante del nombre, de forma que PIVOTARPOR reciba dos campos de columnas y ordene por el primero:

=PIVOTARPOR(
    campofilas;
    APILARH(MES(BD_2025[Fecha Ref.]); MAYUSC(TEXTO(BD_2025[Fecha Ref.]; "mmm")));
    valores;
    SUMA;; 0
)

Aquí los datos ya vienen como fecha, así que MES se aplica directamente sobre la columna. El nombre corto del mes se genera con TEXTO y el formato de tres letras, y MAYUSC lo deja en mayúsculas.

Enfoque 2: una sola llamada a TEXTO con array constante

Gerson firma la versión más compacta. En lugar de apilar dos expresiones, pasa a TEXTO una constante matricial vertical con dos formatos: el numérico del mes y el de nombre corto.

=PIVOTARPOR(
    campofilas;
    TEXTO("1"&campofechas; {"m";"mmm"});
    valores;
    SUMA;; 0;; 0
)

TEXTO recibe un valor y dos formatos a la vez, así que devuelve dos columnas de golpe: el número de mes y su nombre. Sin APILARH, sin repetir la referencia al rango. El "1"& de delante es el truco de Hugo aplicado a la columna entera.

Es el tipo de fórmula que parece magia hasta que ves que el segundo argumento de TEXTO admite una matriz igual que cualquier otro.

Enfoque 3: quitar la columna auxiliar del resultado

El efecto secundario de todo lo anterior es que la fila numérica auxiliar aparece en el resultado. Leo lo remata con EXCLUIR:

=EXCLUIR(
    PIVOTARPOR(
        filas;
        APILARH(MES("1"&meses); meses);
        valores;
        SUMA;; 0;; 0
    );
    1
)

EXCLUIR(matriz; 1) elimina la primera fila del resultado, que es justo la de los números de mes. Queda la tabla con los nombres ordenados de enero a diciembre y sin rastro del andamiaje.

Leo desglosa la receta completa en cuatro pasos, que es la forma más clara de recordarla:

  1. Concatenar un uno al nombre del mes para simular una fecha
  2. Extraer el número con MES
  3. Apilarlo como primer campo de columnas para que mande en la ordenación
  4. Quitar esa fila con EXCLUIR

Funciones clave

  • PIVOTARPOR — tabla de resumen dinámica por fórmula; ordena por el primer campo que le pases
  • MES — extrae el número de mes de una fecha, y de un texto que Excel pueda leer como fecha
  • TEXTO — admite una matriz de formatos, no solo uno
  • APILARH — pega la columna de orden delante de la de nombres
  • EXCLUIR — elimina filas o columnas del resultado, ideal para limpiar auxiliares

Conclusión

El mismo problema aparece con días de la semana, trimestres o cualquier categoría con orden propio que no coincida con el alfabético. La receta es siempre la misma: generar una clave numérica de ordenación, ponerla primero y quitarla al final.

Este caso salió de una duda concreta en el grupo de WhatsApp de InflueXcel, y en pocas horas había cuatro enfoques encima de la mesa. Así se aprende Excel de verdad: viendo cómo distinta gente ataca el mismo obstáculo.

Más casos con estas funciones

Más contenido de Excel en InflueXcel