EXCEL Cadenas de Texto en VBA

10
Cadenas de texto en VBA inShare Existen varias funciones en VBA que podemos utilizar para manipular cadenas de texto. A continuación revisaremos algunas de estas funciones VBA y observaremos el resultados de cada una de ellas. Para iniciar con esta revisión, debes colocar un botón de comando dentro de una hoja de Excel y después hacer doble clic sobre él para introducir el código. Unir cadenas de texto Para unir dos (o más) cadenas de texto podemos utilizar el operador &. Observa el siguiente código:

Transcript of EXCEL Cadenas de Texto en VBA

Page 1: EXCEL Cadenas de Texto en VBA

Cadenas de texto en VBAinShare

Existen varias funciones en VBA que podemos utilizar para manipular cadenas de texto. A continuación revisaremos algunas de estas funciones VBA y observaremos el resultados de cada una de ellas.

Para iniciar con esta revisión, debes colocar un botón de comando dentro de una hoja de Excel y después hacer doble clic sobre él para introducir el código.

Unir cadenas de texto

Para unir dos (o más) cadenas de texto podemos utilizar el operador &. Observa el siguiente código:

El resultado de este código es el siguiente:

Page 2: EXCEL Cadenas de Texto en VBA

La función Left

La función Left en VBA nos ayuda a extraer un número determinado de caracteres a la izquierda de la cadena de texto.

En el código he especificado los 7 caracteres a la izquierda de la cadena de texto. El resultado es el siguiente:

La función Right

La función Right nos permite extraer caracteres a la derecha de una cadena de texto. Observa el siguiente código:

Page 3: EXCEL Cadenas de Texto en VBA

En esta función la cuenta de caracteres se hace de derecha a izquierda siendo el último carácter de la cadena de texto el primero que extraerá la función Right. Para este ejemplo he pedido los últimos 5 caracteres a la derecha de la cadena de texto:

La función Len

La función Len nos ayuda a conocer la longitud de una cadena de texto, es decir, la cantidad de caracteres que conforman a una cadena.

La función Len contará cada uno de los caracteres de la cadena y regresará un número:

Page 4: EXCEL Cadenas de Texto en VBA

La función InStr

La función InStr devuelve la posición de un carácter dentro de la cadena. Supongamos que quiero encontrar la posición de la letra “M” dentro de la cadena que contiene el valor “Hola Mundo”.

Es importante resaltar que la función InStr es sensible a mayúsculas y minúsculas. Observa cómo he especificado buscar la letra “M” (mayúscula) y el resultado de la función es el siguiente:

La función InStr encontró la letra “M” en la posición número 6 comenzando desde la izquierda. Si en lugar de la letra “M” busco la letra “m” (minúscula), la función InStr devolverá el valor 0 (cero) indicando que no ha encontrado dicha letra.

Además de indicar letras individuales en la función InStr, también podemos especificar palabras completas por ejemplo:

Page 5: EXCEL Cadenas de Texto en VBA

cadena = "Hola Mundo"InStr (cadena, "Mundo")

Por ejemplo, al buscar la palabra “Mundo” dentro de la cadena de texto obtendremos como resultado la posición número 6 ya que en esa posición comienza la palabra “Mundo”.

La función Mid

Con la función Mid podemos extraer una subcadena de otra cadena de texto con tan solo especificar la posición inicial de la subcadena y su longitud. Observa el siguiente ejemplo:

La función Mid se moverá a la posición 15 de la cadena y a partir de ahí contará 7 caracteres y devolverá como resultado la cadena comprendida entre ambas posiciones. En nuestro ejemplo, la palabra “funcion” es la que se encuentra entre dichas posiciones.

Las funciones de texto en VBA nos ayudarán a manipular adecuadamente las cadenas de texto y podremos obtener los resultados que necesitamos.

Artículos relacionadosFunciones VBAVariables en VBA

Page 6: EXCEL Cadenas de Texto en VBA

Encontrar caracteres de derecha a izquierda en ExcelinShare1

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

Page 7: EXCEL Cadenas de Texto en VBA

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

Page 8: EXCEL Cadenas de Texto en VBA

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:

12345

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:

Page 9: EXCEL Cadenas de Texto en VBA

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 relacionadosCadenas de texto en VB