Unir las columnas de cada fila con BYROW sin que sobre el separador del final: doce maneras
Juan tenía dos columnas por fila, un código (A.5) y una descripción (b) Prestaciones de servicios), y quería unirlas con un guion en medio: A.5-b) Prestaciones de servicios. Su fórmula era esta:
``
=BYROW(C5:D6&"-";CONCAT)
`
Casi lo consigue, pero le devolvía A.6-b,1 Prestaciones de servicios-, con un guion de más al final. El motivo es que C5:D6&"-" le pone el guion a todas las celdas, también a la última de cada fila, y CONCAT se limita a pegarlas. «Me he vuelto loco», escribió.
En media hora la comunidad le dio doce maneras de arreglarlo. Las hemos probado todas en Excel con sus datos, y once devuelven exactamente lo esperado. La que no, se arregla con un espacio (abajo).
Cortar el guion que sobra. Raúl Ramos dejó el BYROW como estaba y quitó el último guion con TEXTOANTES, que con instancia -1 se queda con todo lo que hay antes del último separador:
`
=TEXTOANTES(BYROW(C5:D6&"-";CONCAT);"-";-1)
`
John dio la vuelta a la idea: poner el guion delante de cada celda y quitar el primer carácter del resultado, con EXTRAE o con REEMPLAZAR:
`
=EXTRAE(BYROW("-"&C5:D6;CONCAT);2;8^5)
=REEMPLAZAR(BYROW("-"&C5:D6;CONCAT);1;1;)
`
Unir con separador desde el principio. Es la solución más natural: UNIRCADENAS pone el separador solo entre elementos, nunca al final. Raúl la propuso con VERDADERO (ignorar vacíos) y John con el argumento en blanco:
`
=BYROW(C5:D6;LAMBDA(x;UNIRCADENAS("-";VERDADERO;x)))
=BYROW(C5:D6;LAMBDA(x;UNIRCADENAS("-";;x)))
`
Hugo Barreto usó MATRIZATEXTO, que convierte la fila en texto separado por punto y coma, y cambió ese separador por el guion. Ojo: en Excel en español MATRIZATEXTO separa con punto y coma y un espacio, así que su fórmula tal cual da A.5- b) Prestaciones…. Basta con sustituir "; " con el espacio:
`
=SUSTITUIR(BYROW(C5:D6;MATRIZATEXTO);"; ";"-")
`
No poner nunca el guion en la primera columna. John remató con tres fórmulas que construyen una constante matricial horizontal {1\0} o {0\1}, una posición por columna, para que el guion solo se aplique a la segunda:
`
=BYROW(SI({1\0};C5:D6;"-"&C5:D6);CONCAT)
=BYROW(REPETIR("-";{0\1})&C5:D6;CONCAT)
=BYROW(TEXTO(C5:D6;SI({1\0};"@";"-@"));CONCAT)
`
La última usa un formato de texto: "@" deja el texto tal cual y "-@" le antepone un guion. «El SI({1\0} que da insomnio», resumió Hugo.
Y sin BYROW. Como son solo dos columnas, John recordó que basta con concatenar los dos rangos, y añadió dos más «por diversión»:
`
=C5:C6&"-"&D5:D6
=DIVIDIRTEXTO(UNIRCADENAS({"-";0};;C5:D6);;0)
=MAP(D5:D6;LAMBDA(x;@+C6:x&"-"&x))
`
La de DIVIDIRTEXTO une todo el rango alternando guion (entre columnas) y salto de fila (el 0), y luego lo parte por filas. La de MAP es la que, según Raúl, «está para una mini clase»: para cada descripción, C6:x forma un rango que Excel reordena para que empiece en la columna C de esa misma fila, y la @ se queda con esa primera celda, que es su código.
John dejó además un consejo de estilo: «no usen el + delante si no es necesario». El =+` es una costumbre heredada de Lotus y Excel no lo necesita.
El fichero trae los datos de Juan, las dos propuestas de Raúl y las doce fórmulas con lo que devuelve cada una.
Un guion de más que no hay forma de quitar
Unir dos columnas de texto por filas parece lo más sencillo del mundo en Excel, hasta que aparece un separador donde no toca. Es lo que le pasó a Juan en el grupo de WhatsApp de InflueXcel: quería juntar un código y una descripción con un guion en medio, y cada fila le salía con un guion colgando al final. Este caso recoge las doce soluciones que dio la comunidad, todas probadas en Excel.
El problema
Juan tenía el código en la columna C (A.5, A.6) y la descripción en la D (b) Prestaciones de servicios). Quería obtener, en una sola columna, A.5-b) Prestaciones de servicios. Su fórmula fue:
=BYROW(C5:D6&"-";CONCAT)BYROW recorre el rango fila a fila y le pasa cada fila a CONCAT, que las une sin separador. El fallo está antes: C5:D6&"-" añade el guion a cada celda del rango, incluida la última de cada fila. Por eso el resultado era A.6-b,1 Prestaciones de servicios-.
Solución paso a paso
Hay tres familias de soluciones, según dónde se ataque el problema.
1. Quitar el separador que sobra. Raúl Ramos mantuvo la fórmula de Juan y la envolvió en TEXTOANTES con la instancia -1, que corta en el último guion:
=TEXTOANTES(BYROW(C5:D6&"-";CONCAT);"-";-1)John propuso poner el guion delante ("-"&C5:D6) y eliminar el primer carácter del resultado con EXTRAE(...;2;8^5) o con REEMPLAZAR(...;1;1;). El 8^5 es solo un número grande para decir «hasta el final del texto».
2. Usar una función que ya sabe unir con separador. UNIRCADENAS solo pone el delimitador entre elementos, nunca al final:
=BYROW(C5:D6;LAMBDA(x;UNIRCADENAS("-";;x)))Es la opción más legible y la que mejor escala si mañana hay cinco columnas en vez de dos. Hugo Barreto aportó una variante con MATRIZATEXTO, que convierte la fila en un texto separado por punto y coma, cambiando luego ese separador por el guion con SUSTITUIR. En Excel en español hay que sustituir "; ", con el espacio incluido, o el resultado queda A.5- b)….
3. No poner el separador en la primera columna. John usó una constante matricial horizontal con una posición por columna: SI({1\0};C5:D6;"-"&C5:D6) deja la primera columna tal cual y antepone el guion a la segunda. El mismo efecto se consigue con REPETIR("-";{0\1}), que repite el guion cero veces en la primera columna y una en la segunda, o con TEXTO y los formatos "@" y "-@".
Sin BYROW. Con solo dos columnas, =C5:C6&"-"&D5:D6 hace el trabajo sin más. Y quedan dos soluciones de exhibición: una con DIVIDIRTEXTO sobre un UNIRCADENAS que alterna guion y salto de fila, y otra con MAP y el operador @ que merece una clase aparte.
Funciones clave
BYROW: aplica unaLAMBDAa cada fila de un rango y devuelve un resultado por fila. Admite funciones sinLAMBDA, comoCONCAT, si reciben un solo argumento.UNIRCADENAS: une textos con un delimitador y puede ignorar los vacíos.TEXTOANTES: devuelve el texto anterior a un delimitador; con instancia negativa cuenta desde el final.MATRIZATEXTO: convierte una matriz en texto. Su separador depende del idioma de Excel.REPETIRySIcon constantes{1\0}: construyen un patrón distinto por columna.
Conclusión
Un guion de más al final esconde una lección útil: el separador se pone entre elementos, no después de cada uno. UNIRCADENAS lo hace de serie, y el resto de enfoques enseñan a controlar qué pasa en cada columna. Gracias a Juan por plantearlo y a Raúl, John y Hugo por convertir una duda en doce formas de pensar la misma fórmula. El fichero del caso trae todas probadas con los datos originales.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Eliminar celdas vacías al concatenar con DIVIDIRTEXTO y BYROW CasoJuan plantea lo que parece una duda sencilla: tiene filas con valores y celdas vacías intercaladas, y necesita concatenar solo los valores n
- Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX CasoInteresante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 text
- ¿MAP o BYROW? Descubre cuándo usar cada una Tutorial¿MAP o BYROW? Descubre cuándo usar cada una y cómo estas funciones pueden transformar tu forma de trabajar en Excel. En este vídeo aprenderá
- Aplicar DIVIDIRTEXTO a un rango completo: 5 formas distintas CasoUn miembro de la comunidad intenta aplicar DIVIDIRTEXTO a un rango completo de celdas en lugar de celda por celda. Su fórmula inicial usa BY
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- Funciones window en Excel: el total del grupo en cada fila con LAMBDA y BYROW TutorialEn SQL se llaman funciones window: columnas que, para cada fila, traen un agregado calculado sobre un grupo mayor. El total de ese cliente a
- Categorizar automáticamente conceptos con BUSCARX REGEX y MAP CasoUn miembro de la comunidad tiene una lista de compra (conceptos como "leche entera", "pan integral", etc.) y una tabla de categorías donde c
- Error #CALC! con MAP y AGRUPARPOR: solución con REDUCE+APILARV CasoNuevo reto de Excel resuelto por la comunidad: un usuario necesita aplicar AGRUPARPOR de forma iterativa sobre un rango de códigos de cuenta
- 3 Formas Efectivas de Unpivot en Excel, PowerQuery y Python TutorialComparamos cómo anular la dinamización de columnas con Excel, Powerqiery y Python. Tres formas para conseguir el mismo resultado. ¿Con cuál
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el