VBA InStr

Función Excel VBA InStr

Instr en VBA se usa para averiguar la posición de una subcadena dada en una cadena después de que especificamos el método de comparación para la función, hay cuatro métodos de comparación diferentes para esta función, Instr es una función de cadena pero la salida devuelta por la función es numérico, por lo que la salida de esta función está en una variable entera.

String en VBA no es más que una serie de caracteres, es decir, todos los textos que se suministran con comillas dobles se tratan como cadenas. La función InStr es una función de texto incorporada que se utiliza para manipular cadenas. Por ejemplo: si desea extraer una subcadena de una oración o si desea aplicar cambios de diseño de fuente a una cadena en particular en una serie de caracteres o si desea encontrar la posición de un carácter y muchas otras posibilidades, puede usar InStr.

Sintaxis

Tiene 4 argumentos como se muestra en la siguiente imagen.

  • [Inicio]: esto no es obligatorio. Este es el valor numérico que necesitamos especificar desde qué posición de la cadena de función Instr comienza a buscar el texto proporcionado. Por ejemplo: si desea buscar el carácter “a” en la palabra “Bangalore” desde la 3ª posición, debemos indicarle a la posición inicial de la función Instr que es 3. Entonces, desde la 3ª posición, el carácter “a” está en la 5ª posición. Si ignora este parámetro, el valor predeterminado es 1.
  • Cadena 1: esta es la cadena real que estamos proporcionando, es decir, a partir de este texto estamos tratando de encontrar la subcadena. Por ejemplo, si está buscando la cadena "a" en "Bangalore", Cadena 1 en Bangalore.
  • Cadena 2: Esto no es más que la cadena que estamos buscando. Por ejemplo, si está buscando la cadena "a" en "Bangalore", la cadena 2 es a .
  • [Compare]: Este es nuevamente un argumento opcional. Hay tres tipos de opciones disponibles en el argumento [comparar].

  • vbBinaryCompare: Esto no es más que una búsqueda sensible a mayúsculas y minúsculas de la subcadena (cadena 2) en la Cadena 1. Por ejemplo, si estamos buscando "a" en la palabra "Bangalore" Instr devolvería 2 como resultado y si está buscando para "A" en la palabra "Bangalore" Instr devolvería 0 como resultado porque la cadena proporcionada es un valor en mayúsculas.

También podemos poner cero (0) como argumento.

vbTextCompare: Esta no es una búsqueda sensible a mayúsculas y minúsculas de la cadena 2 en la cadena 1. Por ejemplo, si estamos buscando "a" en la palabra "Bangalore", Instr devolvería 2 como resultado y si está buscando "A" en la palabra "Bangalore" Instr devolvería 2 también. La lógica es A = a, B = b, C = c, etc.….

También podemos poner uno (1) como argumento.

vbDatabaseCompare: se utiliza para comparar la información de su base de datos, es decir, la base de datos de Microsoft Access.

También podemos poner uno (-1) como argumento.

Los 5 mejores ejemplos de uso de la función VBA Instr

Puede descargar esta plantilla de Excel de la función VBA Instr aquí - Plantilla de Excel de la función VBA Instr

Ejemplo 1

Comencemos con el primer ejemplo. En la palabra Bangalore busque la posición del personaje a.

El siguiente código realizará la tarea por nosotros.

Código:

 Sub Instr_Example1 () Dim i As Variant i = InStr ("Bangalore", "a") MsgBox i End Sub 

Ahora ejecute el código VBA proporcionado anteriormente con la tecla F5 o también puede ejecutar este código manualmente como se muestra en la captura de pantalla que se muestra a continuación.

Salida:

Ejemplo # 2

Ahora, en la palabra Bangalore, busque la posición del carácter "a" desde la tercera posición.

El siguiente código realizará la tarea por nosotros.

Código:

 Sub Instr_Example2 () Dim i As Variant i = InStr (3, "Bangalore", "a") MsgBox i End Sub 

Para ejecutar el código anterior, puede usar la tecla F5 o también puede ejecutar este código manualmente como se muestra en la captura de pantalla que se muestra a continuación.

Salida:

Ahora, en la imagen de arriba, observe la diferencia con el código anterior. Dado que hemos mencionado la posición inicial del carácter como 3, se ignoró el primer carácter "a" en la segunda posición.

Ejemplo # 3

Ahora veremos una búsqueda sensible a mayúsculas y minúsculas. En la palabra Bangalore busque la letra "A".

Para esto, necesitamos proporcionar el argumento de comparación como vbBinaryCompare.

Código:

 Sub Instr_Example3 () Dim i As Variant i = InStr (1, "Bangalore", "A", vbBinaryCompare) MsgBox i End Sub 

Ahora ejecute este código usando la tecla F5 o también puede ejecutar este código manualmente.

Salida:

Como hemos proporcionado el argumento de comparación como vbBinaryCompare, la función Instr devolvió el resultado como cero porque no existe la letra "A" mayúscula .

Ejemplo # 4

Ahora veremos una búsqueda más sensible a mayúsculas y minúsculas. En la palabra Bangalore busque la letra "A". El ejemplo anterior devolvió el resultado como cero.

Para superar el enfoque que distingue entre mayúsculas y minúsculas aquí, necesitamos proporcionar el argumento de comparación como vbTextCompare.

Código:

 Sub Instr_Example4 () Dim i As Variant i = InStr (1, "Bangalore", "A", vbTextCompare) MsgBox i End Sub 

Ahora ejecute este código con la tecla F5 o también puede ejecutar este código manualmente.

Salida:

Ejemplo # 5

Ahora veremos el nivel avanzado de la función Instr. Si tiene muchas hojas que tienen un nombre más o menos similar y desea ocultar todas esas hojas a la vez, podemos usar el siguiente código para ocultar una hoja específica.

Por ejemplo, tengo 5 hojas llamadas Resumen 1, Resumen 2, Resumen 3, Resumen 4 y Hoja de datos.

Ahora quiero ocultar todas aquellas hojas que tienen la palabra "Resumen". Utilice el siguiente código para ocultar todas las hojas que tienen la palabra Resumen en su nombre.

Código:

 Sub To_Hide_Specific_Sheet () Dim Ws As Worksheet For Each Ws In ActiveWorkbook.Worksheets If InStr (Ws.Name, "Summary")> 0 Then Ws.Visible = xlSheetVeryHidden End If Next Ws 'InStr function busca palabra o frase en el nombre de la hoja 'Si lo encuentra, estará oculto End Sub 

Now Run, this code using the F5 Key or you can also run this code manually and see the Output.

Similarly in order to unhide all those sheets use the below code.

Code:

 Sub To_UnHide_Specific_Sheet() Dim Ws As Worksheet For Each Ws In ActiveWorkbook.Worksheets If InStr(Ws.Name, "Summary") > 0 Then Ws.Visible = xlSheetVisible End If Next Ws 'InStr function looks for word or phrase in the sheet name 'If it finds then it will be hidden End Sub 

Now Run, this code using the F5 Key or you can also run this code manually and see the Output.

Things to Remember

  • Instr is a case sensitive function. In order to eliminate this case sensitive issue, you need to supply the [compare] argument as.
  • If you are searching for case sensitive character you need to supply the [compare] argument as by default VBA takes this as the argument even if you do not supply.
  • Instr is a VBA function so that you cannot use it in an excel worksheet like other built-in formulas.
  • If the function cannot find the String 2 the result will be zero.