En los países occidentales utilizamos un sistema de escritura con una dirección de izquierda a derecha y los sistemas computacionales reflejan dicho comportamiento. Excel no es la excepción y sus funciones de búsqueda analizan las cadenas de texto en esa misma dirección.
Si alguna vez has intentado hacer una búsqueda de derecha a izquierda te habrás dado cuenta que es un objetivo difícil de conseguir dada la naturaleza de las funciones de Excel. Pero ¿Por qué alguien querría realizar una búsqueda de derecha a izquierda?
Motivo de la búsqueda de derecha a izquierda
La razón por la que la mayoría de los usuarios de Excel intenta realizar una búsqueda de derecha a izquierda es porque están buscando la última aparición de una palabra o carácter dentro de una cadena de texto. El razonamiento se basa en la siguiente lógica: Si busco de izquierda a derecha la última aparición de una palabra, obtendré el mismo resultado si busco la primera aparición de la palabra pero de derecha a izquierda.
Si quiero encontrar la última aparición de la palabra “mamá” y hago una búsqueda de izquierda a derecha, entonces tengo que preguntarme si la instancia encontrada es efectivamente la última aparición, de lo contrario debo realizar otra búsqueda. Sin embargo, si hago una búsqueda de derecha a izquierda, no tengo que hacerme esa pregunta, sino que simplemente busco la primera aparición de la palabra para llegar a la misma posición.
Este razonamiento es excelente y de hecho es la mejor alternativa a implementar cuando utilizamos lenguajes de programación, pero nos encontramos con cierta dificultad si queremos hacerlo con funciones de Excel. Por esta razón, hoy mostraré dos alternativas de cómo encontrar caracteres o palabras en Excel como si estuviéramos haciendo una búsqueda de derecha a izquierda.
Fórmula para encontrar la última aparición
A continuación te mostraré una fórmula que nos ayuda a obtener la posición de la última aparición de una palabra dentro de una cadena de texto. En esta fórmula, la cadena de texto original se encuentra en B1 y la palabra buscada en B2:
=ENCONTRAR("@",SUSTITUIR(B1,B2,"@",(LARGO(B1)-LARGO(SUSTITUIR(B1, B2,"")))/LARGO(B2)))
La lógica de esta fórmula es encontrar el número de apariciones de la palabra dentro de la cadena de texto original para saber cuál es la última aparición y entonces reemplazarla por un carácter especial, que en este caso es “@”. Una vez hecho este reemplazo será cuestión de encontrar la posición de dicho carácter especial para conocer la posición de la última aparición de la palabra. Observa el comportamiento de esta fórmula:
La fórmula devuelve el valor 48 que es precisamente la posición de la letra “m” que da inicio a la última aparición de la palabra “mamá” dentro de la cadena de texto. Como puedes observar, la fórmula no es nada simple debido a la naturaleza de las funciones de Excel de buscar de izquierda a derecha, pero aun así con un poco de pericia podemos encontrar la posición de la última aparición de la palabra.
Si quieres saber más sobre esta fórmula, te recomiendo leer el artículo Encontrar la posición de la última aparición de una palabra en Excel donde explico paso a paso la lógica utilizada para el desarrollo de la fórmula.
La función InStrRev en VBA
Aunque la fórmula mostrada anteriormente resuelve el problema de encontrar la posición de la última aparición de una palabra, el hecho de utilizar varias funciones hace que para grandes cantidades de datos el tiempo de procesamiento sea considerable. Afortunadamente podemos encontrar una función VBA que nos ayudará a encontrar caracteres de derecha a izquierda en Excel.
La función InStrRev devuelve la posición de la primera aparición de un carácter dentro de una cadena de texto empezando por la derecha. Es importante mencionar que, aunque la búsqueda se hace de derecha a izquierda, la posición devuelta es una posición respecto al primer carácter de la izquierda. Pero antes de hacer un ejemplo revisemos los cuatro argumentos de la función InStrRev:
- String (obligatorio): La cadena de texto original.
- StringMatch (obligatorio): La palabra o carácter que se desea encontrar.
- Start (opcional): La posición donde inicia la búsqueda. Si se omite se inicia a partir del último carácter de la cadena de texto original.
- Compare (opcional): El tipo de comparación que se realizará: 0 = Comparación binario, 1 = Comparación textual, 2 = Comparación basada en basada de datos.
Si la función InStrRev no encuentra la palabra o carácter dentro de la cadena de texto original, entonces devolverá el valor cero. Para utilizar la función InStrRev en mi hoja de Excel crearé una función definida por el usuario (UDF) que reciba tanto la cadena original como la palabra a buscar y entonces devuelva el resultado de la función InStrRev:
Function ENCONTRARINV(cadena As String, palabra As String) As Long ENCONTRARINV = InStrRev(cadena, palabra) End Function
Esta función es muy sencilla y nos devuelve el resultado correcto, que además concuerda con la posición que obtuvimos anteriormente con la fórmula de Excel:
En cualquiera de los dos ejemplos anteriores hemos encontrado la posición de la última aparición de una palabra. Si quieres encontrar la posición pero contando desde la derecha será suficiente con hacer una resta entre la longitud de la cadena original y el resultado de la función anterior. Por ejemplo:
En este ejemplo, el número 48 indica la posición de la palabra “mamá” empezando a contar de la izquierda y el número 11 la posición si se realiza la cuenta comenzando por la derecha. Ahora ya conoces dos alternativas para encontrar caracteres de derecha a izquierda en Excel, descarga el libro de trabajo y utiliza tanto la fórmula desarrollada como la función InStrRev en tus búsquedas.
Artículos relacionados
Cadenas de texto en VBA