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 una LAMBDA celda 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 variable d una 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