Usar BUSCARV en formulario de Excel vba e identificar texto o números

Este artículo podría considerarse uno más de los publicados con respecto al tema de la función BUSCARV, pero con detalles que no se habían tocado en otro artículo.

En el ejemplo adjunto tenemos una tabla que aloja el nombre del usuario o número telefónico y un respectivo código ficticio. También tenemos un formulario donde deberemos escribir el usuario o teléfono para traer de vuelta dicho su código.

Ver video Identificar valores de texto, número y fecha en Formulario con BUSCARV

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Cómo funciona

La manera en la que nos traemos el código es mediante el uso de la función BUSCARV desde vba. Las funciones que regularmente usamos en celdas, en vba las podemos obtener mediante Application.WorksheetFunction.

Uso de BUSCARV en formulario de Excel vba

El primer paso será definir la matriz donde se buscarán los datos. Esto lo hacemos con la propiedad CurrentRegion del objeto Range, el cual tomará de referencia la celda A1.

Con la función IsNumeric se validará si el valor introducido en el formulario es número. En caso de ser núnero se hará una conversión al tipo Double para que el BUSCARV no genere al pensar que el valor es tipo texto.

En caso de no encontrar el valor en la tabla, se mostrará una etiqueta en el formulario indicando que el valor no fue encontrado (en una celda equivaldría al #N/A).

BUSCARV con Excel vba

Código vba

Option Explicit
'
Private Sub CommandButton1_Click()
'
'Declaramos las variables.
Dim Nombre As String
Dim Rango As Range
Dim NombreBuscado As Variant
Dim Titulo As String
'
Titulo = "EXCELeINFO"
'
'En caso de error...
On Error GoTo ErrorHandler
'
Set Rango = Sheets(1).Range("A1").CurrentRegion
'
'Validamos si el valor es numérico.
NombreBuscado = Me.TextBox1.Value
If IsNumeric(NombreBuscado) Then
    NombreBuscado = CDbl(NombreBuscado)
End If
'
'Asignamos a la variable Nombre el resultado del BUSCARV.
Nombre = Application.WorksheetFunction.VLookup(NombreBuscado, Rango, 2, 0)
'
'Pasamos el resultado al cuadro de texto (TextBox).
With Me
    .TextBox2.Value = Nombre
    .lblMensaje.Visible = False
End With
'
Exit Sub
'
'De haberse encontrado un error mostramos mensajes.
ErrorHandler:
If Err.Number = 1004 Then
    With Me
        .lblMensaje.Caption = "Email o teléfono no encontrado."
        .lblMensaje.Visible = True
    End With
Else
    MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, Titulo
End If
End Sub
'
Private Sub UserForm_Initialize()
'
'Ocultamos controles.
With Me
    .TextBox2.Enabled = False
    .lblMensaje.Visible = False
End With
'
End Sub

Anexos

:: Descargar ejemplo Formulario de Buscarv con Excel vba.rar

You may also like...

5 Responses

  1. Pedro Fernando Marín Figueroa says:

    Gracias justo lo estaba buscando!

  2. Pedro Fernando Marín Figueroa says:

    Gracias justo lo estaba buscando!

  3. Randhy River says:

    AYUDAME POR FAVOR
    AMIGO PERO SI DESEO QUE LA CELDA B1 SEA LA DE BÚSQUEDA C1 LA DEL CÓDIGO COMO HAGO

  4. Javier Palacios says:

    hola, el valor buscado es una fecha, no logro crear la función que la identifique en mi tabla de datos y con ellos me regrese los valores de las filas siguientes q necesito
    Gracias

  5. Ricardo Arbeláez says:

    Saludos desde Colombia: muchas gracias por compartir este valioso material. Mi inquietud es la siguiente: quiero crear una aplicación para contabilidad de mi pequeña empresa y, para hacer cada registro debo especificar el código contable al cual cargaré o abonaré. El listado de los códigos los tengo en excel y para el userform decidí incluirlo en un listbox, lo que quiero que haga es que cuando seleccione un codigo de mi listbox, me traiga automáticamente el nombre de esa cuenta por ejemplo: (110505(listbox) Caja(textbox), he intentado con la función Vlookup pero no lo he logrado. tal vez estoy declarando mal las variables. Seria de mucha ayuda si me sacaras de esta duda.

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: