En este tutorial, aprenderás a encontrar la posición de la última ocurrencia de un personaje en una cadena en Excel.
Hace unos días, a un colega se le ocurrió este problema.
Tenía una lista de URLs como se muestra a continuación, y necesitaba extraer todos los caracteres después de la última barra inclinada («/»).
Así que por ejemplo, de https://example.com/archive/ Enero tuvo que extraer ‘Enero’.
Habría sido muy fácil si hubiera habido una sola barra en los URLs.
Lo que tenía era una enorme lista de miles de URLs de diferente longitud y un número variable de barras de avance.
En tales casos, el truco es encontrar la posición de la última ocurrencia de la barra oblicua en el URL.
En este tutorial, te mostraré dos formas de hacerlo:
- Usando una fórmula de Excel
- Utilizando una función personalizada (creada a través de VBA)
Glosario
Obtener la última posición de un personaje usando la fórmula de Excel
Cuando tengas la posición de la última ocurrencia, puedes simplemente extraer cualquier cosa a la derecha de ella usando la función DERECHA.
Aquí está la fórmula que encontraría la última posición de una barra inclinada hacia adelante y extraería todo el texto a la derecha de ella.
=RIGHT(A2,LEN(A2)-FIND(«@»,SUBSTITUTO(A2,»/»,»@»,LEN(A2)-LEN(SUBSTITUTO(A2,»/»,»)),1))
¿Cómo funciona esta fórmula?
Desglosemos la fórmula y expliquemos cómo funciona cada parte de ella.
- SUSTITUCIÓN(A2,»/»,»») – Esta parte de la fórmula reemplaza la barra de avance por una cadena vacía. Así que por ejemplo, en caso de que quieras encontrar la ocurrencia de cualquier cadena que no sea la barra de avance, úsala aquí.
- LEN(A2)-LEN(SUBSTITUTO(A2,»/»,»)) – Esta parte te diría cuántas barras de avance hay en la cuerda. Simplemente resta la longitud de la cuerda sin la barra de avance de la longitud de la cuerda con barras de avance.
- SUBSTITUTO(A2,»/»,»@»,LEN(A2)-LEN(SUBSTITUTO(A2,»/»,»)) – Esta parte de la fórmula reemplazaría la última barra de adelante con @. La idea es hacer que ese personaje sea único. Puedes usar cualquier personaje que quieras. Sólo asegúrate de que sea único y que no aparezca ya en la cadena.
- BUSCAR(«@»,SUSTITUIR(A2,»/»,»@»,LEN(A2)-LEN(SUSTITUIR(A2,»/»,»»)),1) – Esta parte de la fórmula te daría la posición de la última barra de avance.
- LEN(A2)-FIND(«@»,SUBSTITUTO(A2,»/»,»@»,LEN(A2)-LEN(SUBSTITUTO(A2,»/»,»)),1) – Esta parte de la fórmula nos diría cuántos caracteres hay después de la última barra de avance.
- =DERECHO(A2,LEN(A2)-Encontrar(«@»,SUSTITUIR(A2,»/»,»@»,LEN(A2)-LEN(SUSTITUIR(A2,»/»,»»)),1)) – Ahora esto simplemente nos daría la cadena después de la última barra de avance.
Obtención de la última posición de un personaje usando la función personalizada (VBA)
Mientras que la fórmula anterior es genial y funciona como un encanto, es un poco complicada.
Si se siente cómodo usando VBA, puede usar una función personalizada (también llamada Función definida por el usuario) creada a través de VBA. Esto puede simplificar la fórmula y puede ahorrar tiempo si tiene que hacerlo a menudo.
Usemos el mismo conjunto de datos de URL (como se muestra a continuación):
Para este caso, he creado una función llamada LastPosition, que encuentra la última posición del carácter especificado (que es una barra inclinada hacia adelante en este caso).
Aquí está la fórmula que hará esto:
=DERECHO(A2,LEN(A2)-ÚltimaPosición(A2,»/»)+1)
Puedes ver que esto es mucho más simple que el que usamos arriba.
Así es como funciona esto:
- La última posición, que es nuestra función personalizada, devuelve la posición de la barra de avance. Esta función toma dos argumentos – la referencia de la celda que tiene la URL y el carácter cuya posición necesitamos encontrar.
- La función DERECHA nos da entonces todos los caracteres después de la barra de avance.
Aquí está el código VBA que creó esta función:
Función LastPosition(rCell As Range, rChar As String) Esta función da la última posición del personaje especificado Este código ha sido desarrollado por Sumit Bansal (https://trumpexcel.com) Dim rLen como entero rLen = Len(rCell) Para i = rLen a 1 paso -1 Si Mid(rCell, i – 1, 1) = rChar Entonces Última posición = i Función de salida Finalizar si Siguiente… Fin de la función
Para hacer que esta función funcione, tienes que colocarla en el editor de VB. Una vez hecho, puedes usar esta función como cualquier otra función normal de Excel.
Estos son los pasos para copiar y pegar este código en el back-end de VB:
Estos son los pasos para colocar este código en el VB Editor:
- Ve a la pestaña de Desarrolladores. <img sizes="(max-width: 708px) 100vw, 708px" alt="Encontrar la última coincidencia Ocurrencia de un elemento en una lista" height="162" data-pin-media="https://trumpexcel.com/wp-content/uploads/2018/02/IF-Then-Else-in-Excel-VBA-Developer-Tab-in-ribbon.png" nitro-lazy-src="https://nitrocdn.com/zciqOWZgDznkuqFpvIJsLUeyHlJtlHxe/assets/static/source/rev-896a1a1/wp-content/uploads/2018/02/IF-Then-Else-in-Excel-VBA-Developer-Tab-in-ribbon.png" nitro-lazy-srcset="https://nitrocdn.com/zciqOWZgDznkuqFpvIJsLUeyHlJtlHxe/assets/static/source/rev-896a1a1/wp-content/uploads/2018/02/IF-Then-Else-in-Excel-VBA-Developer-Tab-in-ribbon.png 708w, https://nitrocdn.com/zciqOWZgDznkuqFpvIJsLUeyHlJtlHxe/asset