Ir al contenido principal

Función InStr de VBA: cómo buscar texto en Excel VBA

Aprende a usar la función InStr de VBA para encontrar texto dentro de cadenas: sintaxis, ejemplos, sensibilidad a mayúsculas y errores comunes.
Actualizado 21 sept 2026  · 9 min leer

Explorar con IA

ChatGPTClaudePerplexity

Si has escrito más de un par de macros en VBA, seguro que te has visto en esa situación en la que necesitas comprobar si un texto existe dentro de una celda. En VBA, InStr es una de esas funciones que terminas usando en todas partes. Te dice en qué posición aparece un texto dentro de otro. Puedes usarla para comprobar si un texto existe en una celda, analizar valores dentro de un texto o ejecutar lógica condicional en macros que dependen de patrones de texto.

En esta guía, te explico la sintaxis de InStr, varios ejemplos, cómo funcionan los modos de comparación (esta parte da más guerra de la que debería) y algunos patrones que realmente vas a reutilizar.

Te recomiendo empezar por nuestro itinerario de aprendizaje Excel Fundamentals para construir una base sólida antes de pasar a VBA, o hacer nuestro curso Advanced Excel Functions si ya tienes algo de experiencia, para aprender cómo las funciones mejoran la eficiencia en el análisis de datos.

¿Qué es la función InStr de VBA?

InStr es una función de VBA que devuelve la posición de la primera ocurrencia de una cadena dentro de otra.

Los resultados se comportan así:

  • Si la encuentra, devuelve un número (la posición donde empieza la coincidencia)
  • Si no encuentra nada, devuelve 0

Por ejemplo, si «cat» aparece en la posición 5 de una cadena, obtienes 5. Si no está, obtienes 0.

Sintaxis de InStr en VBA

Esta es la sintaxis completa de InStr:

InStr([start], string1, string2, [compare])

Donde:

  • start (opcional): Indica a VBA desde dónde empezar la búsqueda. Si lo omites, VBA empieza en la posición 1.

  • string1 (obligatorio): El texto completo en el que buscas.

  • string2 (obligatorio): El texto que intentas encontrar.

  • compare (opcional): Define cómo se realiza la comparación (si distingue mayúsculas/minúsculas o no). Si lo dejas en blanco, VBA usa el modo por defecto, normalmente sensible a mayúsculas.

Ten en cuenta que puedes ignorar los argumentos start y compare (InStr(string1, string2)) para una versión más simple. Pero si decides usar el argumento compare, también debes proporcionar el argumento start.

Cómo funciona InStr en VBA

Piensa en InStr como leer una frase de izquierda a derecha, carácter a carácter.

La función empieza con string1, lo recorre y busca el primer lugar donde string2 coincide. En cuanto encuentra esa coincidencia, se detiene y devuelve la posición donde comenzó.

La posición de la «coincidencia» es importante porque VBA cuenta desde 1, no desde 0. Así, el primer carácter de una cadena es la posición 1, el segundo es 2, y así sucesivamente. 

Valores de retorno de InStr en VBA

Interpretar el resultado de InStr es directo. Puedes obtener:

  • Un número positivo: si encuentra una coincidencia; el número indica dónde empieza.

  • 0: si no hay coincidencia en ningún punto de la cadena

Sin embargo, si tus cadenas de entrada son Null, la función devuelve Null. Aunque en macros básicas puedes pasarlo por alto, conviene saberlo porque esa diferencia puede romper una condición sin que te des cuenta.

Ejemplos básicos de InStr en VBA

Ahora te muestro algunos ejemplos de cómo usar la función InStr de VBA. 

Encontrar una palabra en una frase

Para comprobar si la palabra «before» está dentro de la nota «Deliver before noon».

Sub Before()

    Dim result As Integer
    result = InStr("Deliver before noon", "before")
    
    MsgBox result

End Sub

El resultado del VBA anterior es 9 ya que «before» empieza en el carácter 9.

Comprobar si existe un carácter

Para comprobar si el carácter «0» existe en una cadena dada, usa este VBA:

Sub ChExist()

    Dim result As Integer
    result = InStr(“A1023”, “0”)
    
    MsgBox result

End Sub

En este caso, cualquier resultado mayor que 0 significa que el carácter se ha encontrado.

Buscar desde el inicio de una cadena

Para buscar desde el principio de una cadena, no necesitas especificar la posición de inicio; comienza en 1. Ese es el valor por defecto salvo que digas lo contrario.

Sub ChExist()

    Dim result As Integer
    result = InStr("Report_2026_Final", "2026")
    
    MsgBox result

End Sub

Cómo usar InStr de VBA en sentencias If

Cuando trabajas con una hoja real, no solo buscas un número; intentas tomar una decisión. La forma más común de usar InStr es dentro de una sentencia If para filtrar datos.

En todo este tutorial, usaremos un conjunto de datos de ejemplo, Orders, con las columnas: ID, CustomerName, Email, City y OrderNotes.

If InStr(...) > 0 Then

Como InStr devuelve 0 cuando no encuentra nada, comprobamos si hay resultado cuando devuelve un número mayor que 0.

En el ejemplo siguiente, mira la columna OrderNotes (columna 5). Si encuentra la palabra «Fragile», escribe «Handle Carefully» en la columna 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention "Fragile"
        If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Comprobaciones condicionales por palabras clave y filtrado de texto

También puedes usar InStr para buscar palabras clave en cadenas, sobre todo si la frase cambia ligeramente. Por ejemplo, el código de abajo comprueba si la nota contiene «Call» (como «Call on arrival» o «Call before delivery»). Luego marca y añade la etiqueta «Call Customer» en la columna 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention “Call”
        If InStr(Cells(i, 5).Value, “Call”) > 0 Then
            Cells(i, 6).Value = “Call Customer”
        End If
        
    Next i

End Sub

Distinguir mayúsculas y modos de comparación en InStr de VBA

Por defecto, InStr distingue mayúsculas y minúsculas (modo vbBinaryCompare). Si buscas «chicago» pero los datos ponen «Chicago», InStr devolverá 0.

Para solucionarlo, usa el argumento compare, donde:

  • vbBinaryCompare (por defecto): distingue mayúsculas («A» no es lo mismo que «a»)

  • vbTextCompare: no distingue mayúsculas («A» es lo mismo que «a»)

En el ejemplo siguiente, InStr devuelve 0 porque busca «fragile» (minúsculas) dentro de «Fragile items».

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
    
    MsgBox result

End Sub

En cambio, usando vbTextCompare devuelve 1 con la misma búsqueda porque ignora las mayúsculas.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbTextCompare)
    
    MsgBox result

End Sub

InStr de VBA con posición inicial

A veces no quieres empezar la búsqueda al principio de la cadena. El argumento start indica a VBA dónde comenzar.

En el ejemplo de abajo, el argumento start se establece en 10, así que VBA empieza a buscar desde el carácter 10 en lugar del primero. Luego encuentra "delivery" más adelante en la cadena.

Sub CheckUrgent()

    Dim result As Integer
    
    result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
    
    MsgBox result

End Sub

El resultado del ejemplo anterior es 31, que es la posición donde empieza "delivery".

Este método es útil cuando quieres la segunda ocurrencia de algo o ignorar un prefijo conocido al trabajar con patrones repetidos.

InStr de VBA vs. InStrRev

Como ya has visto, InStr busca de izquierda a derecha. En cambio, InStrRev busca de derecha a izquierda.

Por ejemplo, hemos usado InStrRev para encontrar el último punto en el email. El resultado es 18, que es la posición del punto antes de «com».

Sub CheckChr()

    Dim result As Integer
    
    result = InStrRev("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

InStrRev te resultará más útil cuando necesites la última ocurrencia de algo o cuando trabajes con nombres de archivo, emails o rutas.

Casos de uso comunes de InStr en VBA

Ahora que hemos visto ejemplos de cómo funciona InStr en VBA, veamos los casos de uso más habituales.

Comprobar si una celda contiene una palabra clave

Imagina que tienes un dataset de pedidos de clientes y necesitas marcar pedidos para un tratamiento específico. El código mira la columna OrderNotes y marca cualquier cosa con «noon».

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
            ' Logic to mark as "Morning Delivery"
        End If
        
    Next i

End Sub

Validar texto con formato de email

También puedes usar InStr para comprobar rápidamente formatos de email válidos. Por ejemplo, el código de abajo verifica si el email contiene @ y escribe «Valid Email Format» en la columna 6.

Sub ValidateEmail()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(Cells(i, 3).Value, "@") > 0 Then
            Cells(i, 6).Value = "Valid Email Format"
        End If
        
    Next i

End Sub

Detectar separadores como comas o guiones

Puedes usar InStr para comprobar si hay guiones, comas o barras en un texto. En el ejemplo siguiente, el código recorre OrderNotes (columna E), comprueba si hay una coma en el texto y luego escribe un resultado en la columna F.

Sub ValidateEmail()

    Dim i As Integer
    Dim commaPos As Integer
    Dim OrderNotes As String
    
    For i = 2 To 51
        
        OrderNotes = Cells(i, 5).Value
        
        commaPos = InStr(1, OrderNotes, ",")
        
        ' If a comma exists, mark it
        If commaPos > 0 Then
            Cells(i, 6).Value = "Has comma"
        Else
            Cells(i, 6).Value = "No comma"
        End If
        
    Next i

End Sub

Errores comunes con InStr en VBA

Incluso con experiencia, puedes encontrarte con problemas al usar InStr que hacen que tu código se comporte de forma inesperada. Estos son los fallos más comunes que me he encontrado y cómo resolverlos:

  • Olvidar que InStr empieza en 1: recuerda siempre que las posiciones comienzan en 1, no en 0. Si vienes de Python o JavaScript, al principio choca.

  • Tratar InStr como True/False: recuerda que InStr no devuelve True o False. Si quieres saber si encuentra algo, debes comprobar si el resultado es > 0.

  • Ignorar las mayúsculas/minúsculas: como ya sabes, InStr distingue mayúsculas por defecto. Si no te importa, indícalo con vbTextCompare en el argumento compare.

  • Confundir string1 y string2: recuerda siempre que el primer argumento es dónde buscas. El segundo es lo que buscas. Si buscas así InStr(SearchTerm, FullText), siempre obtendrás 0.

InStr de VBA frente a otras funciones de cadena de VBA

Como InStr suele indicar dónde está una cadena dentro de un texto, compáremosla con otras funciones de texto.

InStr vs. Like

El operador Like se usa para coincidir patrones. Por ejemplo, el código de abajo comprueba «Fragile», pero usa el patrón *, que significa «cualquier cosa antes o después».

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If Cells(i, 5).Value Like "*Fragile*" Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Usa InStr si solo necesitas saber si un texto existe, y Like cuando necesites comprobar texto con patrones complejos.

InStr vs. Replace

Aunque puedes usar InStr para cambiar el valor completo de una celda, la función Replace cambia un texto específico dentro de la celda.

En el ejemplo de abajo, Replace sustituye directamente «Fragile» por «Handle Carefully» dentro del texto.

Sub ReplaceOrder()

    Dim i As Integer
    
    For i = 2 To 51
        Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
    Next i

End Sub

InStr vs. Mid

La función Mid se usa para extraer texto de una cadena. Por eso, a menudo usarás Mid junto con InStr para extraer el texto tras obtener su posición. 

El código siguiente extrae el dominio de los emails del dataset. InStr encuentra dónde aparece "@" en el email y luego Mid empieza a extraer a partir de ahí. El código termina escribiendo el dominio en la columna H.

Sub ExtractDomain()

    Dim i As Integer
    Dim pos As Integer
    Dim domain As String
    
    For i = 2 To 51
        
        pos = InStr(1, Cells(i, 3).Value, "@")
        
        If pos > 0 Then
            domain = Mid(Cells(i, 3).Value, pos + 1)
            Cells(i, 8).Value = domain
        End If
        
    Next i

End Sub

InStr vs.Split

La función Split se usa para dividir un texto en partes indicando un separador. 

En el ejemplo siguiente, el código lee cada fila de la columna A, comprueba si hay una coma y luego divide el texto en dos partes. Escribe Name → columna B y City → columna C.

Sub SplitTextColumn()

    Dim i As Integer
    Dim lastRow As Integer
    Dim parts As Variant
    Dim text As String
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        
        text = Cells(i, 1).Value
        
        ' Only split if a comma exists
        If InStr(1, text, ",") > 0 Then
            
            parts = Split(text, ",")
            
            Cells(i, 2).Value = parts(0) ' Name
            Cells(i, 3).Value = parts(1) ' City
            
        End If
        
    Next i

End Sub

Buenas prácticas al usar InStr en VBA

Para evitar errores en tu VBA, te recomiendo estas buenas prácticas que me han ahorrado mucho tiempo:

  • Usa vbTextCompare cuando no importe las mayúsculas: como la mayoría de los datos reales no son consistentes con las mayúsculas, puedes perder coincidencias si dependes del argumento de comparación por defecto.

  • Combínalo con «If» para una lógica clara: intenta devolver siempre un valor, ya que InStr por sí sola solo te da un número.

  • Comprueba > 0, no posiciones exactas, salvo que realmente necesites la posición.

  • Mantén legible el análisis. No encadenes demasiadas funciones en una sola línea.

Conclusión

InStr es sencilla, pero acabarás usándola por todas partes. Te da la posición de una cadena dentro de otra, y ese único número impulsa muchas decisiones en VBA: si algo existe, desde dónde extraer y qué debe hacer la macro a continuación. Por sí sola, es solo una búsqueda. Combinada con funciones como Mid, Replace o incluso Split, forma parte de un flujo de trabajo que realmente te ayuda a sacar trabajo adelante.

Haz nuestro curso Data Analysis in Excel para dominar analítica avanzada. Además, haz nuestro Intermediate Power Query in Excel para aprender sobre transformación de datos y el uso del lenguaje M.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

FAQs

¿Qué devuelve exactamente InStr?

Devuelve la posición donde empieza la coincidencia. Si no encuentra nada, devuelve 0.

¿InStr distingue mayúsculas y minúsculas?

Sí, InStr distingue mayúsculas por defecto. ”Fragile” y ”fragile” se tratan como distintos. Usa vbTextCompare si no quieres una comparación sensible a mayúsculas.

¿Qué significa que InStr es 1-based?

El primer carácter de una cadena es la posición 1, no 0. Esto importa cuando usas el resultado en otras funciones.

¿Qué pasa si uno de los valores es Null?

El resultado también será Null, no 0.

¿Cuál es la diferencia entre InStr e InStrRev?

InStr busca de izquierda a derecha, mientras que InStrRev empieza de derecha a izquierda. Usa la segunda cuando te importe la última ocurrencia.

Temas
Excel

Aprende con DataCamp

programa

Fundamentos de Excel

16 h
Adquiere las habilidades esenciales que necesitas para utilizar Excel, desde preparar datos hasta escribir fórmulas y crear visualizaciones. No se requiere experiencia previa.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow