Generar identificadores únicos a partir de valores repetidos: 6 enfoques distintos
Problema clásico que genera una lluvia de soluciones: a partir de una columna con valores repetidos (10, 10, 20, 20...), crear un identificador único añadiendo un contador (101, 102, 201, 202...). La comunidad responde con 6 fórmulas distintas en cuestión de minutos.
Con MAP + CONTAR.SI expansivo (John):
``
=MAP(A2:A99; LAMBDA(x; 10x + CONTAR.SI(A2:x; x)))
`
El truco está en el rango expansivo A2:x: a medida que MAP avanza por cada fila, el rango crece y CONTAR.SI cuenta cuántas veces ha aparecido el valor hasta ese punto.
Con MAP + SUMA + rango expansivo (Gerson):
`
=MAP(A2:A10; LAMBDA(x; SUMA(N(x = x:A2)) + 10x))
`
Mismo concepto pero usando SUMA(N(...)) en lugar de CONTAR.SI, que algunos encuentran más intuitivo para rangos dinámicos.
Con MAP + concatenación de texto (+506):
`
=MAP(A2:A5; LAMBDA(x; x&TEXTO(CONTAR.SI(A2:x; x); "0")))
`
Variante que concatena el contador como texto en vez de usar aritmética.
Con SCAN acumulador (Hugo):
`
=A2:A13&SCAN(1; A2:A13; LAMBDA(a; b; CONTAR.SI(A2:b; b)))
`
Usa SCAN para construir el contador de forma secuencial. La diferencia con MAP es que SCAN mantiene un acumulador explícito entre iteraciones.
Con LET + FILA - COINCIDIRX (Bolivia):
`
=LET(d; A2:A13; d&FILA(d) - COINCIDIRX(d; d))
`
La solución más ingeniosa: la diferencia entre la fila actual y la primera aparición del valor (vía COINCIDIRX) da automáticamente el número de ocurrencia (0, 1, 2...). Sin MAP, sin LAMBDA`, sin rangos expansivos.
Un caso que demuestra que en Excel siempre hay más de una forma de llegar al mismo resultado, y que las soluciones más cortas no siempre son las más obvias.
El problema: convertir repetidos en identificadores únicos
Tienes una columna con valores que se repiten (10, 10, 20, 20...) y necesitas convertirlos en identificadores únicos añadiendo un contador de ocurrencia: 101, 102, 201, 202... Es un problema clásico, de esos que parecen triviales hasta que te sientas a resolverlos con una sola fórmula.
Lo interesante de este caso es que la comunidad respondió con seis enfoques distintos en cuestión de minutos. Todos llegan al mismo sitio por caminos muy diferentes, y compararlos enseña más que cualquiera de ellos por separado.
Enfoque 1: MAP con rango expansivo
La propuesta de John apoya toda la lógica en un detalle poco conocido:
=MAP(A2:A99; LAMBDA(x; 10*x + CONTAR.SI(A2:x; x)))La clave es el rango expansivo A2:x. A medida que MAP avanza fila a fila, ese rango va creciendo, y CONTAR.SI cuenta cuántas veces ha aparecido el valor hasta ese punto. La primera vez devuelve 1, la segunda 2, y así sucesivamente.
Enfoque 2: la misma idea con SUMA
Gerson plantea el mismo concepto cambiando la función de conteo:
=MAP(A2:A10; LAMBDA(x; SUMA(N(x = x:A2)) + 10*x))Aquí SUMA con N sustituye a CONTAR.SI. N convierte los VERDADERO/FALSO en unos y ceros, y la suma da el número de ocurrencias. A mucha gente le resulta más intuitivo para rangos dinámicos.
Enfoque 3: contador como texto
Una variante que evita la aritmética y concatena directamente:
=MAP(A2:A5; LAMBDA(x; x&TEXTO(CONTAR.SI(A2:x; x); "0")))Útil cuando el identificador debe ser texto y no un número, por ejemplo si luego lo vas a usar como clave de búsqueda.
Enfoque 4: SCAN con acumulador
Hugo tira de SCAN:
=A2:A13&SCAN(1; A2:A13; LAMBDA(a; b; CONTAR.SI(A2:b; b)))La diferencia con MAP es conceptual: SCAN mantiene un acumulador explícito entre iteraciones. Aquí no se aprovecha del todo, pero es la puerta de entrada a problemas donde cada fila sí depende del resultado de la anterior.
Enfoque 5: la solución sin LAMBDA
Y aquí llega la sorpresa. Bolivia propone esto:
=LET(d; A2:A13; d&FILA(d) - COINCIDIRX(d; d))Sin MAP, sin LAMBDA y sin rangos expansivos. La idea es preciosa: COINCIDIRX(d; d) devuelve, para cada valor, la posición de su primera aparición. Restando esa posición a la fila actual sale automáticamente el número de ocurrencia: 0 para la primera, 1 para la segunda, 2 para la tercera...
Es la fórmula más corta y probablemente la menos obvia de todas.
Funciones clave
MAP: aplica unaLAMBDAcelda a celda sobre un rango y devuelve una matriz del mismo tamaño.CONTAR.SI: cuenta cuántas veces aparece un valor; combinado con un rango expansivo, se convierte en un contador incremental.SCAN: recorre un rango arrastrando un acumulador entre iteraciones.COINCIDIRX: devuelve la posición de la primera coincidencia. La pieza que hace posible el enfoque 5.LET: nombra la variableduna vez y la reutiliza, evitando repetir el rango tres veces.
Cuál elegir
Si buscas legibilidad, el MAP con CONTAR.SI es el que cualquiera entiende de un vistazo. Si tienes muchas filas, el rango expansivo se vuelve costoso porque el conteo crece con cada iteración, y ahí la fórmula de FILA menos COINCIDIRX gana por goleada: no itera, resuelve todo de golpe.
Conclusión
Seis formas de resolver el mismo problema, y ninguna es "la correcta". En Excel casi siempre hay más de un camino, y las soluciones más cortas rara vez son las primeras que se te ocurren. Este tipo de lluvia de enfoques es lo que pasa cada semana en la comunidad de Influexcel: alguien trae un problema real y, entre todos, acaba saliendo un catálogo de técnicas que vale más que la respuesta.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- 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
- Media móvil dinámica: 6 enfoques con SCAN, MMULT y MAP CasoUn miembro de la comunidad tiene un rango con ventas mensuales y necesita generar una columna con la media móvil de los últimos 3 meses usan
- Repetir un rango N veces según marca con MAP y CONTAR.SI CasoUn usuario necesita repetir un listado de locales (D2:D10) un número variable de veces para cada marca de la columna B. El número de repetic
- 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
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHector llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Estructurar correctamente LAMBDA con LET y parámetros opcionales CasoNuevo reto de Excel resuelto por la comunidad: un miembro está creando una función LAMBDA personalizada para calcular potencia de bombeo (fó
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- 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
- Sustituir condicionales anidados por BUSCARV en Excel TutorialTodos hemos escrito esa fórmula: un SI dentro de otro SI dentro de otro, hasta que la celda es ilegible y nadie se atreve a tocarla tres mes
- Distribuir gastos por categoría con SI.CONJUNTO matricial y reparto proporcional CasoUn miembro de la comunidad tiene una tabla de gastos donde cada línea tiene un concepto (categoría como "SGA", "Overhead", "COGS") y un impo