lunes, 25 de mayo de 2015

Dígitos Duplicados en Distinto Orden


"Tengo un listado de valores de tres dígitos y necesito detectar cuáles están duplicados en el mismo o distinto orden. Por ejemplo 123, 231, 456, 456, 564, etcétera". 

Partimos del siguiente ejemplo:

Preparamos ahora las siguientes tablas para "manipular" los datos iniciales. Aunque el enunciado habla de 3 dígitos, preparamos tablas para contemplar hasta 6 dígitos:
Nos situamos en E3 y escribimos la fórmula(que copiaremos hasta J3 y, finalmente, hasta J17):
=SI.ERROR(VALOR(EXTRAE($B3;E$2;1));"")
De esta manera estamos extrayendo cada dígito y reconvirtiéndolo en VALOR (ya que la función EXTRAE nos lo devuelve como texto):
 Una vez hecho esto, nos situamos en L3 y escribimos la fórmula:
=SI.ERROR(K.ESIMO.MENOR($E3:$J3;L$2);"")
y copiamos hasta Q2 y finalmente hasta Q17:
De esta manera hemos reordenado de menor a mayor los dígitos. Procedemos ahora a unirlos de nuevo con la función CONCATENAR (&). En S3 escribimos:
y copiamos hasta S17:
Ahora ya podemos proceder a contar los números que se repiten en más de una ocasión y "asociarlos" con sus "originales". Nos situamos en la celda C3 y escribimos la fórmula:
=SI(CONTAR.SI($S$3:$S$17;S3)>1;"Repetido";"")    y copiamos hasta C17:

1 comentario:

  1. Hola Kiko,

    El siguiente "monstruo", que es ciertamente infumable, genera un número único por cada cadena de texto con independencia del orden de los caracteres (o eso creo). No lo he probado, pero si la cadena de texto es larga probablemente devuelva un error.

    =SUMA(K.ESIMO.MENOR(CODIGO(EXTRAE(B2;FILA(INDIRECTO("1:"&LARGO(B2)));1));FILA(INDIRECTO("1:"&LARGO(B2))))*POTENCIA(256;FILA(INDIRECTO("1:"&LARGO(B2)))-1))

    Es una fórmula matricial (cómo si no). Lo que hace es extraer cada carácter, convertirlo en su código ASCII, ordenarlo de menor a mayor, multiplicarlo por una potencia de 256 y sumar todos los resultados parciales.

    Encontrar los duplicados es fácil con "CONTAR.SI".

    Un saludo y enhorabuena por el blog.

    ResponderEliminar