Agrupar y limpiar referencias con AGRUPARPOR, DIVIDIRTEXTO y APILARV

Interesante problema de un miembro que trabaja con una tabla de "Push Money cancelado" con más de 150 productos. Las referencias vienen duplicadas con formato "CÓDIGO-CÓDIGO" (ej: LABU11000-LABU11000) y necesita agrupar por referencia limpia y fabricante, sumando los importes.

El reto tiene doble vertiente: limpiar la referencia (quedarse con la parte antes del guion) y agrupar los datos filtrando por fabricante. La comunidad aportó tres enfoques distintos, cada uno con sus ventajas.

Solución 1: AGRUPARPOR + TEXTOANTES

Gerson propuso usar AGRUPARPOR con la función SINGLE como agregador, y luego limpiar las referencias con TEXTOANTES:

``
=LET(
a; AGRUPARPOR(
TablaPushMoney[[Referencia]:[Fabricante]];
TablaPushMoney[Push Money cancelado];
SINGLE;; 0;;
TablaPushMoney[Fabricante]="ABUELO"
);
TEXTOANTES(a; "-";; ;; a)
)
`

AGRUPARPOR agrupa por las columnas Referencia y Fabricante, aplicando SINGLE como función (devuelve el valor tal cual cuando no hay duplicados) y filtrando solo el fabricante deseado. Después, TEXTOANTES limpia las referencias quitando todo a partir del guion — y el último argumento a actúa como valor por defecto si no hay guion.

Solución 2: LET + DIVIDIRTEXTO

Otra propuesta más compacta usando DIVIDIRTEXTO para descomponer la tabla completa:

`
=LET(m; DIVIDIRTEXTO(TablaPushMoney&"-"; "-"); SI.ERROR(--m; m))
`

Un enfoque elegante que concatena un guion extra a toda la tabla y luego divide por "-", convirtiendo los resultados numéricos con --. Ojo: DIVIDIRTEXTO tiene un límite de ~32.000 caracteres, así que esta solución puede fallar con tablas muy grandes.

Solución 3: APILARV + TEXTOANTES + APILARH

Un tercer enfoque más explícito reconstruyendo la tabla columna a columna:

`
=APILARV(
TablaPushMoney[#Encabezados];
APILARH(
TEXTOANTES(TablaPushMoney[Referencia]; "-";;;; TablaPushMoney[Referencia]);
TablaPushMoney[Fabricante];
TablaPushMoney[Push Money cancelado]
)
)
`

Aquí se limpia la columna de referencias con TEXTOANTES, se reensambla la tabla horizontalmente con APILARH y se añaden los encabezados originales con APILARV`. Más verbose pero muy claro de leer.

El problema: referencias duplicadas y agrupación por fabricante

Un miembro que trabaja con una tabla de más de 150 productos se topó con un doble reto. Las referencias venían duplicadas dentro de la misma celda, con formato "CÓDIGO-CÓDIGO" (por ejemplo, un código repetido con un guion en medio), y necesitaba agrupar por referencia limpia y por fabricante, sumando los importes.

Son en realidad dos tareas encadenadas: limpiar la referencia (quedarse con la parte anterior al guion) y agrupar los datos filtrando por fabricante. La comunidad aportó tres enfoques, cada uno con su punto fuerte.

Solución 1: AGRUPARPOR + TEXTOANTES

Gerson combinó la agrupación con la limpieza en un LET:

=LET(
    a; AGRUPARPOR(
        TablaPushMoney[[Referencia]:[Fabricante]];
        TablaPushMoney[Push Money cancelado];
        SINGLE;; 0;;
        TablaPushMoney[Fabricante]="ABUELO"
    );
    TEXTOANTES(a; "-";; ;; a)
)

AGRUPARPOR agrupa por Referencia y Fabricante, usa SINGLE como función de agregado (devuelve el valor tal cual cuando no hay duplicados) y filtra directamente el fabricante deseado con su último argumento. Después, TEXTOANTES(a; "-") recorta cada referencia quedándose con lo anterior al guion; el último argumento actúa como valor por defecto si alguna referencia no tuviera guion. Todo en una fórmula.

Solución 2: LET + DIVIDIRTEXTO

Una versión más compacta que descompone la tabla entera de golpe:

=LET(m; DIVIDIRTEXTO(TablaPushMoney&"-"; "-"); SI.ERROR(m*1; m))

El truco: concatena un guion extra a toda la tabla, divide por "-" con DIVIDIRTEXTO y luego fuerza a número los trozos que lo sean (aquí con m*1; también sirve la doble negación con dos signos menos). Elegante, pero con una pega importante: DIVIDIRTEXTO tiene un límite de unos 32.000 caracteres, así que puede quedarse corta con tablas muy grandes.

Solución 3: APILARV + TEXTOANTES + APILARH

Un tercer camino, más explícito, reconstruyendo la tabla columna a columna:

=APILARV(
    TablaPushMoney[#Encabezados];
    APILARH(
        TEXTOANTES(TablaPushMoney[Referencia]; "-";;;; TablaPushMoney[Referencia]);
        TablaPushMoney[Fabricante];
        TablaPushMoney[Push Money cancelado]
    )
)

Aquí se limpia la columna de referencias con TEXTOANTES, se reensambla la tabla en horizontal con APILARH y se le añaden los encabezados originales por arriba con APILARV. Es más verboso, pero se lee de un vistazo y no depende de trucos de coerción.

Funciones clave

  • AGRUPARPOR: agrupa por varias columnas y admite un filtro y una función de agregado a medida.
  • TEXTOANTES: extrae el texto anterior a un delimitador, con valor por defecto si falta.
  • DIVIDIRTEXTO: parte texto por un separador (ojo al límite de tamaño).
  • SINGLE: agregador que devuelve el valor cuando el grupo no tiene duplicados.
  • APILARV y APILARH: reconstruyen la tabla con sus encabezados.

Conclusión

Limpiar y agrupar a la vez es una combinación que sale constantemente con datos exportados de otros sistemas. Tienes desde la vía compacta (AGRUPARPOR + TEXTOANTES) hasta la reconstrucción explícita con APILARV, pasando por el truco de DIVIDIRTEXTO. Elige según el tamaño de tus datos y lo legible que quieras dejar la fórmula. Retos de limpieza como este se resuelven cada semana en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel