Función InStr

La función InStr devuelve la posición donde una cadena de búsqueda aparece por primera vez dentro de otra cadena. Es esencial para validación de cadenas, extracción de datos, ramificación condicional y muchos otros escenarios.

Sintaxis básica

Función InStr (Búsqueda desde el inicio)

InStr([inicio], cadena, cadena_busqueda, [comparar])

Función InStrRev (Búsqueda desde el final)

InStrRev(cadena, cadena_busqueda, [inicio], [comparar])

Parámetros (InStr)

ParámetroTipoRequeridoDescripción
inicioLongNoPosición inicial (predeterminado 1)
cadenaStringLa cadena donde buscar
cadena_busquedaStringLa cadena a buscar
compararVbCompareMethodNoConfiguración de sensibilidad a mayúsculas

Valor de retorno

  • Si se encuentra: Posición (comenzando desde 1)
  • Si no se encuentra: 0
チェック

Las posiciones de InStr comienzan en 1 (no 0). Cuando no se encuentra, devuelve 0. Usa verificaciones condicionales como If posicion > 0 Then para verificar el resultado.

Uso básico

Búsqueda simple

instr_basico.bas
Sub InStrEjemploBasico()
    Dim texto As String
    Dim posicion As Long

    texto = "Hola Mundo, Bienvenido a VBA"

    ' Encontrar "Mundo"
    posicion = InStr(texto, "Mundo")
    Debug.Print posicion  ' 6 (comienza en el carácter 6)

    ' Cuando no se encuentra
    posicion = InStr(texto, "Python")
    Debug.Print posicion  ' 0
End Sub

Especificar posición de inicio

instr_posicion_inicio.bas
Sub InStrConPosicionInicio()
    Dim texto As String
    Dim posicion As Long

    texto = "192.168.1.1"

    ' Encontrar primer "."
    posicion = InStr(texto, ".")
    Debug.Print "Primer punto: " & posicion  ' 4

    ' Encontrar segundo "." (comenzar después del primer punto)
    posicion = InStr(posicion + 1, texto, ".")
    Debug.Print "Segundo punto: " & posicion  ' 8

    ' Encontrar tercer "."
    posicion = InStr(posicion + 1, texto, ".")
    Debug.Print "Tercer punto: " & posicion  ' 10
End Sub

Búsqueda insensible a mayúsculas

instr_insensible_mayusculas.bas
Sub InStrInsensibleMayusculas()
    Dim texto As String
    Dim posicion As Long

    texto = "Hola Mundo"

    ' Sensible a mayúsculas (predeterminado)
    posicion = InStr(texto, "mundo")
    Debug.Print "Sensible: " & posicion  ' 0 (no encontrado)

    ' Insensible a mayúsculas
    posicion = InStr(1, texto, "mundo", vbTextCompare)
    Debug.Print "Insensible: " & posicion  ' 6
End Sub

InStrRev: Búsqueda desde el final

InStrRev busca desde el final de la cadena. Es particularmente útil para extraer nombres de archivo de rutas.

instrrev_ejemplo.bas
Sub InStrRevEjemplo()
    Dim rutaArchivo As String
    Dim posicion As Long
    Dim nombreArchivo As String
    Dim rutaCarpeta As String

    rutaArchivo = "C:\Users\Usuario\Documentos\informe.xlsx"

    ' Encontrar último "\" desde el final
    posicion = InStrRev(rutaArchivo, "\")

    ' Extraer nombre de archivo
    nombreArchivo = Mid(rutaArchivo, posicion + 1)
    Debug.Print "Nombre de archivo: " & nombreArchivo  ' informe.xlsx

    ' Extraer ruta de carpeta
    rutaCarpeta = Left(rutaArchivo, posicion - 1)
    Debug.Print "Carpeta: " & rutaCarpeta  ' C:\Users\Usuario\Documentos
End Sub
チェック

InStrRev facilita extraer nombres de archivo de rutas. Como busca desde el final, encuentra el último carácter separador eficientemente.

Ejemplos prácticos

Contar ocurrencias

instr_contar_ocurrencias.bas
Function ContarOcurrencias(texto As String, buscar As String) As Long
    Dim cuenta As Long
    Dim posicion As Long

    cuenta = 0
    posicion = InStr(texto, buscar)

    Do While posicion > 0
        cuenta = cuenta + 1
        posicion = InStr(posicion + 1, texto, buscar)
    Loop

    ContarOcurrencias = cuenta
End Function

Sub ProbarContarOcurrencias()
    Dim texto As String
    texto = "El rápido zorro marrón salta sobre el perro perezoso"

    Debug.Print "Cuenta de 'el': " & ContarOcurrencias(LCase(texto), "el")  ' 2
    Debug.Print "Cuenta de 'o': " & ContarOcurrencias(texto, "o")           ' 6
End Sub

Extraer subcadenas entre delimitadores

instr_extraer_entre.bas
Function ExtraerEntre(texto As String, delimInicio As String, delimFin As String) As String
    Dim posInicio As Long
    Dim posFin As Long

    posInicio = InStr(texto, delimInicio)
    If posInicio = 0 Then
        ExtraerEntre = ""
        Exit Function
    End If

    posInicio = posInicio + Len(delimInicio)
    posFin = InStr(posInicio, texto, delimFin)

    If posFin = 0 Then
        ExtraerEntre = ""
        Exit Function
    End If

    ExtraerEntre = Mid(texto, posInicio, posFin - posInicio)
End Function

Sub ProbarExtraerEntre()
    Dim html As String
    html = "<title>Mi Título de Página</title>"

    Debug.Print ExtraerEntre(html, "<title>", "</title>")  ' Mi Título de Página
End Sub

Resumen

InStr e InStrRev son funciones fundamentales de búsqueda de cadenas en VBA:

  • InStr: Busca desde el inicio, ideal para validación y extracción
  • InStrRev: Busca desde el final, ideal para análisis de rutas
  • Devuelve 0 cuando no se encuentra—siempre verifica el resultado
  • Usa vbTextCompare para búsquedas insensibles a mayúsculas
  • Combina con Mid, Left, Right para manipulación potente de cadenas

Domina estas funciones para manejar eficientemente operaciones de cadenas en tus proyectos VBA.

#VBA #InStr #InStrRev #Operaciones de cadenas #Búsqueda