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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| inicio | Long | No | Posición inicial (predeterminado 1) |
| cadena | String | Sí | La cadena donde buscar |
| cadena_busqueda | String | Sí | La cadena a buscar |
| comparar | VbCompareMethod | No | Configuració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
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
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
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.
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
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
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
vbTextComparepara 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.