Una frase es un palíndromo si se puede leer igual de derecha a izquierda que de izquierda a derecha. Por ejemplo: Diré: "si Mari vive, ¿revivirá mi ser?". ¡Id!
El problema que se presenta es múltiple. Excel considera diferentes las mayúsculas y las minúsculas (D≠d), las letras sin acentuar y las acentuadas (é≠e) y, además, hay que prescindir de los signos de puntuación (puntos, comas, signos de admiración, guiones, etc).
Pongamos una frase en B3 y comencemos a resolver el ejercicio.
Paso 1: Extraer todos los caracteres, de uno en uno, en la columna E y ponerlos en mayúscula.
En E3:
=MAYUSC(EXTRAE($B$3;FILA(A1);1))
Extendemos la fórmula hasta la fila 100.
Paso 2: Crear un "nombre" para poder prescindir de esta columna.
Accedemos a Fórmulas + Asignar nombre y creamos el siguiente:
Deletreado | =MAYUSC(EXTRAE(Hoja1!$B$3;FILA(DESREF(Hoja1!$A$1;0;0;LARGO(Hoja1!$B$3)));1)) |
Borramos los datos de la columna E, seleccionamos E3:E100 y escribimos:
=Deletreado [Terminamos con Ctrl + Mayús + Intro]
No_valen | ={".";",";":";":";"?";"¿";"¡";"!";" ";""""} |
Hemos incluido los signos ortográficos habituales y el espacio en blanco. Podríamos haber añadido algunos más: guión corto, guión largo, guión bajo, comillas angulares («»), signo de párrafo (§), apóstrofo, asterisco, llave, paréntesis...
Probemos este nuevo "nombre" en la columna E. Seleccionamos E3:E20 y escribimos:
=No_valen [Terminamos con Ctrl + Mayús + Intro]
Una vez que hayamos comprobado que la matriz es correcta, volvemos a borrar los datos de la columna E.
Paso 4: Eliminar los caracteres incluidos en la matriz No_valen.
Volvemos a crear el tercer "nombre".
Con_tilde | =SI(ESERROR(BUSCARV(Deletreado;No_valen;1;FALSO));Deletreado;"") |
Comprobamos que este "nombre" genera la lista de caracteres de la frase prescindiendo de los caracteres de puntuación. Para ello, seleccionamos E3:E100 y escribimos:
=Con_tilde [Terminamos con Ctrl + Mayús + Intro]
De nuevo, borramos la lista de la columna E.
Paso 5: Crear una matriz con los 6 caracteres que llevan tilde. Esta matriz se guardará en un "nombre" cuyo valor será:
Tildes | ={"Á";"É";"Í";"Ó";"Ú";"Ü"} |
Podemos volver a probarlo en la columna E, borrándolo posteriormente.
Paso 6: Crear una lista con los los caracteres de la frase excluidos los signos de puntuación y con las vocales acentuadas sustituidas por vocales sin acentuar. Esta lista estará contenida en un "nombre" con el siguiente valor:
Sin_tilde | =SI(ESERROR(COINCIDIR(Con_tilde;Tildes;0));Con_tilde;ELEGIR(COINCIDIR(Con_tilde;Tildes;0);"A";"E";"I";"O";"U";"U")) |
Seleccionamos F3:F100 y escribimos:
=Sin_tilde [Terminamos con Ctrl + Mayús + Intro]
Paso 7: Asignar números correlativos a cada carácter. Si la celda está en blanco tendrán el mismo número que la celda precedente.
En G3:
=CONTARA($F$3:F3)-CONTAR.BLANCO($F$3:F3)
Extendemos la fórmula hasta la fila 100.
Paso 8: Crear una lista sin celdas en blanco.
En H3:
=INDICE(Sin_tilde;COINCIDIR(FILA(A1);$G$3:$G$100;0))
Extendemos la fórmula hasta la fila 100.
Paso 9: Obtener el código ASCII de cada carácter.
En I3:
=CODIGO(H3)
Extendemos la fórmula hasta la fila 100.
Paso 10: Contar cuantas celdas tienen números en la columna I. Es decir, cuantos caracteres han quedado después de eliminar signos de puntuación y espacios en blanco.
En J3:
=CONTAR(I:I)
Paso 11: Poner la frase al revés.
En K3:
=INDIRECTO(DIRECCION($J$3+5-FILA();COLUMNA($H$1)))
Extendemos la fórmula hasta la fila 100.
Paso 12: Comparar las columnas H y K. Si los valores coinciden, poner 1; si no coinciden, poner 0.
En L3:
=--(H3=K3)
Extendemos la fórmula hasta la fila 100.
Paso 13: Sumar los números de la columna L.
En M3:
=SUMA(DESREF(L3;0;0;J3))
Paso 14: Comparar el valor de M3 con el valor de J3. Si coinciden, la frase es una palíndromo; en caso contrario, no lo es.
En N3 y en C3:
=SI(J3=M3;"Sí";"No")
hola me gustaria ver si me ayudara en que me estoy equivocando en mi formula
ResponderEliminar=si(izquierda;a3;1=derecha;a3;1);"paladromo";"no palandromo")
Jaja, complejo, ¿no? Saludos
ResponderEliminar