Función Excel VBA InStr: explicada con ejemplos

Tabla de contenido

Ayer recibí un correo electrónico de uno de mis lectores: junio.

Quería saber cómo aplicar el formato de fuente en negrita a una parte específica de una cadena dentro de una celda. Por ejemplo, aplique el formato de negrita solo a la palabra "Hola" de "Hola mundo".

Y quería hacer esto por cientos de células a la vez.

Como no hay una funcionalidad incorporada en Excel que pueda hacer eso, creé una macro simple que usa el Función Excel VBA InStr (verá cómo hacer esto en el Ejemplo 4 de este tutorial).

Pero primero, veamos cómo funciona la función Excel VBA InStr.

Función Excel VBA InStr

En este tutorial, explicaré el uso de la función InStr en Excel VBA y veré algunos ejemplos prácticos donde se puede usar.

Función Excel VBA InStr - Introducción

La función InStr encuentra la posición de una subcadena especificada dentro de la cadena y devuelve la primera posición de su aparición.

Por ejemplo, si desea encontrar la posición de "x" en "Excel", el uso de la función Excel VBA InStr devolvería 2.

Sintaxis de la función InStr

InStr ([Inicio], Cadena1, Cadena2, [Comparar])
  • [Comienzo] - (argumento opcional) este es un valor entero que le dice a la función InStr la posición inicial desde la cual debe comenzar a buscar. Por ejemplo, si quiero que la búsqueda comience desde el principio, ingresaré el valor como 1. Si quiero que comience con el tercer carácter en adelante, usaré 3. Si se omite, se toma el valor predeterminado de 1.
  • String1 - Esta es la cadena principal (o la cadena principal) en la que desea buscar. Por ejemplo, si busca la posición de x en Excel, la Cadena 1 sería "Excel".
  • String2 - Esta es la subcadena que está buscando. Por ejemplo, si está buscando la posición de x en Excel, String2 sería x.
  • [Comparar] - (argumento opcional) Puede especificar uno de los siguientes tres valores para el argumento [comparar]:
    • vbBinaryCompare - Esto haría una comparación personaje a personaje. Por ejemplo, si busca "x" en "Excel", devolverá 2, pero si busca "X" en "Excel", devolverá 0 como X en mayúsculas. También puede utilizar 0 en lugar de vbBinaryCompare. Si se omite el argumento [Comparar], se toma como predeterminado.
    • vbTextCompare - Esto haría una comparación textual. Por ejemplo, si busca "x" o "X" en Excel, devolverá 2 en ambos casos. Este argumento ignora el caso de la letra. También puede utilizar 1 en lugar de vbTextCompare.
    • vbDatabaseCompare - Esto se usa solo para Microsoft Access. Utiliza la información de la base de datos para realizar la comparación. También puede utilizar 2 en lugar de vbDatabaseCompare.

Notas adicionales sobre la función InStr de Excel VBA:

  • InStr es una función de VBA y no una función de hoja de trabajo. Esto significa que no puede usarlo dentro de la hoja de trabajo.
  • Si String2 (que es la subcadena cuya posición está buscando) está vacía, la función devolvería el valor del argumento [Start].
  • Si la función InStr no puede encontrar la subcadena dentro de la cadena principal, devolvería 0.

Ahora echemos un vistazo a un ejemplo del uso de la función InStr de Excel VBA

Ejemplo 1: encontrar la posición desde el principio

En este ejemplo, usaré la función InStr para encontrar la posición de "V" en "Excel VBA" desde el principio.

El código para esto sería:

Sub FindFromBeginning () Dim Posición como número entero Posición = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Posición Fin Sub

Cuando ejecute este código, mostrará un cuadro de mensaje con el valor 7, que es la posición de "V" en la cadena "Excel VBA".

Ejemplo 2: encontrar la posición desde el principio de la segunda palabra

Supongamos que quiero encontrar la posición de "el" en la oración: "El rápido zorro marrón salta sobre el perro perezoso".

Sin embargo, quiero que la búsqueda comience con la segunda palabra en adelante.

En este caso, necesitamos cambiar el argumento [Inicio] para asegurarnos de que especifica la posición desde donde comienza la segunda palabra.

Aquí está el código que hará esto:

Sub FindFromSecondWord () Dim Posición como entero Posición = InStr (4, "El rápido zorro marrón salta sobre el perro perezoso", "el", vbBinaryCompare) MsgBox Posición Fin Sub

Este código mostrará el cuadro de mensaje con el valor 32 ya que hemos especificado la posición inicial como 4. Por lo tanto, ignora el primer "El" y encuentra el segundo "el" en la oración.

Si desea hacerlo más dinámico, puede mejorar el código para que ignore automáticamente la primera palabra.

Aquí está el código mejorado que hará esto:

Sub FindFromSecondWord () Dim StartingPosition como entero Dim Posición como entero StartingPosition = InStr (1, "El rápido zorro marrón salta sobre el perro perezoso", "", vbBinaryCompare) Position = InStr (StartingPosition, "El rápido zorro marrón salta sobre el perezoso perro "," el ", vbBinaryCompare) MsgBox Posición Fin Sub

Este código primero encuentra la posición de un carácter de espacio y la almacena en la variable StartingPosition.

Luego usa esta variable como la posición inicial para buscar la palabra "el".

Por lo tanto, devuelve 32 (que es la posición inicial de "the" después de la primera palabra).

Ejemplo 3: búsqueda de la posición de @ en la dirección de correo electrónico

Puede crear fácilmente una función personalizada para encontrar la posición de @ en una dirección de correo electrónico utilizando la función Excel VBA InStr.

Aquí está el código para crear la función personalizada:

Función FindPosition (Ref As Range) Como Integer Dim Posición Como Entero Posición = InStr (1, Ref, "@") FindPosition = Posición Función final

Ahora puede usar esta función personalizada como cualquier otra función de la hoja de trabajo. Tomará una referencia de celda como entrada y le dará la posición de @ en ella.

De manera similar, puede crear una función personalizada para encontrar la posición de cualquier subcadena dentro de la cadena principal.

Ejemplo 4: resaltado de una parte de la cadena dentro de las celdas

Esta es la consulta que me hizo June (mi lector que también me inspiró a escribir este tutorial).

Aquí hay una muestra de datos en el formato que me envió June:

Su consulta fue poner en negrita los números fuera del corchete.

Aquí está el código que creé que hace esto:

Sub Negrita () Dim rCell como rango Dim Char como entero para cada rCell en la selección CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = Verdadero Siguiente rCell End Sub

El código anterior usa el bucle For Each para pasar por cada una de las celdas de la selección. Identifica la posición del carácter de corchete de apertura utilizando la función InStr. Luego cambia la fuente del texto antes del corchete.

Para usar este código, debe copiar y pegar en un módulo en el editor de VB.

Una vez que haya copiado y pegado el código, seleccione las celdas en las que desea realizar este formateo y ejecute la macro (como se muestra a continuación).

También le pueden gustar los siguientes tutoriales de Excel VBA:

  • Función Excel VBA SPLIT.
  • Función VBA TRIM.
  • La guía definitiva para bucles VBA de Excel.
  • Una guía para principiantes sobre el uso de For Next Loop en Excel VBA.
  • Cómo crear y usar un complemento de Excel.
  • Cómo combinar varios libros de trabajo en un solo libro de Excel.
  • Cómo contar celdas de colores en Excel.
  • Ejemplos de macros útiles de Excel VBA para principiantes.
  • Cómo ordenar datos en Excel usando VBA (una guía paso a paso)

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave