Cómo encontrar cadena con VBA en Excel (8 Ejemplos)

  • Compartir Este
Hugh West

Aplicación de VBA es el método más eficaz, rápido y seguro para ejecutar cualquier operación en Excel. En este artículo, le mostraremos cómo encontrar ciertas cadenas en otra cadena dada utilizando VBA en Excel.

Descargar plantilla de prácticas

Puede descargar la plantilla práctica gratuita de Excel desde aquí.

VBA para encontrar en String.xlsm

Función InStr

Microsoft Excel tiene una función incorporada llamada la función InStr para encontrar la posición de cadenas específicas en una Cadena dada.

Sintaxis genérica:

InStr([inicio], cadena1, cadena2, [comparar])

Toma,

Argumentos Obligatorio/ Facultativo Definición
iniciar Opcional Posición inicial de la búsqueda.
  • Por defecto, el InStr calcula la posición del carácter contando desde 1, no desde la posición inicial, por lo que puede dejarlo en blanco si lo desea.
cadena1 Requerido La cadena en la que buscar, Primary String.
cadena2 Requerido La cadena a buscar en la cadena primaria.
compare Opcional En InStr distingue entre mayúsculas y minúsculas por defecto, pero si desea ejecutar una función que no distinga entre mayúsculas y minúsculas InStr Este argumento puede tener los siguientes valores,
  • vbBinaryCompare -> realiza una comparación binaria, valor de retorno 0
  • vbTextCompare -> realiza una comparación de texto, valor de retorno 1
  • vbDatabaseCompare -> realiza una comparación de base de datos, valor de retorno 2

Por defecto, InStr toma vbBinaryCompare como argumento de comparación.

8 Ejemplos Fáciles para Encontrar la Posición de una Cadena Específica en una Cadena Dada Usando VBA

Veamos algunos ejemplos sencillos para obtener las posiciones de determinadas cadenas en una cadena dada utilizando VBA .

1. VBA para encontrar la posición de un texto en una cadena

A continuación se muestra un ejemplo de InStr para encontrar la posición de un texto en una cadena.

  • Pulse Alt + F11 en su teclado o vaya a la pestaña Desarrollador -> Visual Basic para abrir Editor de Visual Basic .

  • En la ventana de código emergente, en la barra de menús, haga clic en Insertar -> Módulo .

  • Ahora, en la ventana de código, escribe un simple InStr dentro de un Subprocedimiento VBA (véase más abajo).
 Sub INSTR_Example() MsgBox InStr("La felicidad es una elección", "elección") End Sub 

Su código ya está listo para ejecutarse.

  • Pulse F5 en el teclado o, en la barra de menús, seleccione Run -> Run Sub/UserForm También puede hacer clic en el botón pequeño icono Play en la barra del submenú para ejecutar la macro.

Verá que el cuadro de mensaje emergente le dará un número que declara la posición del texto que desea comprobar.

Explicación:

Nuestra cadena principal, " La felicidad es una elección " es una frase de 21 letras (con espacios) y queríamos encontrar la posición del texto " elección "El texto " elección " partió de la posición 16 de la cadena primaria, por lo que obtuvimos el número 16 como nuestra salida en el cuadro de mensaje.

2. VBA para Buscar Texto a partir de una Posición Específica en una Cadena

Ahora vamos a averiguar qué pasaría si quisiéramos obtener la posición a partir de un número determinado.

  • De la misma manera que antes, abra Editor de Visual Basic del Desarrollador y Inserte a Módulo en la ventana de código.
  • En la ventana de código, escriba un simple InStr mostrado arriba y pase el valor en el argumento start de acuerdo a la posición desde la que quiere contar su texto.
 Sub INSTR_Example() MsgBox InStr(17, "La felicidad es una elección", "elección") End Sub 

  • Siguiente, Ejecutar el código.

Verá que el cuadro de mensaje emergente le dará un número que declara la posición del texto partiendo de una posición determinada que querías comprobar.

Explicación:

Como ya sabíamos (por el debate de la fase 1) que el texto " elección " partió de la posición de 16 por lo que insertamos dos " elección " en la cadena primaria y establezca 17 como primer parámetro para omitir el primer " elección ". Así que Ejecutar la macro anterior y nos mostró la posición número 27 que es exactamente el número de posición del segundo " elección " en la cadena dada.

3. VBA para Buscar Texto con la Función InStr insensible a mayúsculas y minúsculas en String

Desde la introducción del InStr ya sabe que, por defecto, la función InStr distingue entre mayúsculas y minúsculas. Averigüémoslo con un ejemplo.

Véase lo siguiente VBA donde queríamos encontrar la posición de la palabra " Elección " con un C mayúscula en la cadena " La felicidad es una elección " donde elección se escribe con "c" minúscula .

  • Ejecutar el código y encontrar 0 como salida.

Esto se debe a que el InStr función trata C mayúscula y "c" minúscula de forma diferente. Así que buscó la palabra " Elección " en la cadena y no obtuvo ninguna coincidencia, por lo que devolvió 0 .

  • Para que el InStr función distingue entre mayúsculas y minúsculas establece el argumento compare en vbTextCompare (véase más abajo).
 Sub INSTR_Example() MsgBox InStr(1, "La felicidad es una elección y elección", "Elección", vbTextCompare) End Sub 

  • Ejecutar el código.

Obtendrá el posición del texto de la cadena, si el texto está escrito en mayúsculas o minúsculas .

4. VBA para Buscar Texto a la Derecha de una Cadena

Hasta ahora el InStr sólo nos daba la posición desde el lado izquierdo de la cadena. Pero ¿qué pasa si quieres encontrar la posición del texto desde el lado derecho de la cadena?

La función InStrRev busca por la derecha. El InStrRev funciona de forma muy similar a la función InStr y te buscará la posición de un texto de la carpeta lado derecho de la cadena.

Vea los siguientes ejemplos para entender la diferencia.

  • Si ejecutamos el siguiente código con el InStr función entonces,

nos da la posición ( 16 ) del primer texto " elección ".

  • Pero si ejecutamos el mismo código con el InStrRev Función entonces,

nos da la posición ( 27 ) del último texto " elección ".

Lecturas similares:

  • FindNext Usando VBA en Excel (2 Ejemplos)
  • Cómo buscar y reemplazar utilizando VBA (11 maneras)
  • Buscar coincidencia exacta usando VBA en Excel (5 maneras)

5. VBA para Encontrar la Posición de un Carácter en una Cadena

También puede encontrar la posición de un determinado carácter en una cadena del mismo modo que encontró texto.

  • Copie el siguiente código en su VBA ventana de código
 Sub Find_Character() Dim z As Long z = InStr("La felicidad es una elección", "e") MsgBox z End Sub 

  • Y Ejecutar la macro.

La primera " e "en nuestra cadena dada está en el número 7 posición.

6. VBA para Buscar Subcadena en una Cadena

Aquí aprenderemos a encontrar si una cadena contiene un subcadena o no.

Para conseguirlo, tenemos que ejecutar un Declaración IF en nuestro código.

  • De la misma manera que antes, abra Editor de Visual Basic del Desarrollador y Inserte a Módulo en la ventana de código.
  • En la ventana de código, copia el siguiente código y pégalo.
 Public Sub FindSub() If InStr("La felicidad es una elección", "elección") = 0 Then MsgBox "No se han encontrado coincidencias" Else MsgBox "Se han encontrado coincidencias" End If End Sub 

Su código ya está listo para ejecutarse.

  • Ejecutar la macro.

Si su contiene la subcadena entonces obtendrá un coincidencia encontrada En nuestro ejemplo, queríamos averiguar si nuestra cadena primaria " La felicidad es una elección "contiene la palabra " elección "Si lo hace, obtenemos un Coincidencia encontrada resultado.

7. VBA para Buscar Cadena en un Rango de Celdas

Puede buscar un texto determinado en un rango de celdas de cadena y devolver una cadena determinada.

Mira el siguiente ejemplo donde encontraremos " Dr. " y cuando haya una coincidencia devolverá " Doctor ".

  • A continuación se muestra el código para obtener el resultado discutido anteriormente,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Ejecutar el código y el resultado se muestra a continuación

  • Puede modificar la macro en función de sus necesidades. Por ejemplo, si desea buscar " Prof. " en cualquier celda de la cadena, y obtener " Profesor " como retorno, entonces simplemente pasa " Prof. "como valor en lugar de " Dr ." en la 4ª línea de la macro y " Profesor " en lugar de " Doctor " en la 5ª línea de la macro y defina el número de rango de celdas en consecuencia.

8. VBA para Buscar Cadena en una Celda

También puede buscar un texto determinado en una sola celda de cadena y devuelve una cadena determinada.

  • Copie el siguiente código y péguelo en la ventana de código.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Buscará " Dr. " en Célula B5 y si encuentra la coincidencia devuelve " Doctor " en Célula C5 .

  • Puede modificar la macro en función de sus necesidades. Por ejemplo, si desea buscar " Prof. " en cualquier celda de la cadena, y obtener " Profesor " como retorno, entonces simplemente pasa " Prof. "como valor en lugar de " Dr ." en la 2ª línea de la macro y " Profesor " en lugar de " Doctor " en la 3ª línea de la macro y defina el número de referencia de la celda en consecuencia.

Conclusión

Este artículo muestra cómo encontrar ciertos textos en una cadena en Excel utilizando Macro VBA. Espero que este artículo le haya sido de gran utilidad. No dude en formular cualquier pregunta relacionada con el tema.

Hugh West es un capacitador y analista de Excel altamente experimentado con más de 10 años de experiencia en la industria. Tiene una Licenciatura en Contabilidad y Finanzas y una Maestría en Administración de Empresas. Hugh tiene una pasión por la enseñanza y ha desarrollado un enfoque de enseñanza único que es fácil de seguir y comprender. Su conocimiento experto de Excel ha ayudado a miles de estudiantes y profesionales en todo el mundo a mejorar sus habilidades y sobresalir en sus carreras. A través de su blog, Hugh comparte su conocimiento con el mundo, ofreciendo tutoriales gratuitos de Excel y capacitación en línea para ayudar a las personas y empresas a alcanzar su máximo potencial.