¿Cómo puedo hacer la función BUSCARV usando macro en una celda vacía en automático?

Tengo en una hoja una tabla de 2 columnas con un número y el nombre de la empresa en cada fila, en otra hoja al seleccionar de una lista desplegable (generada de la pestaña Datos referenciando la lista de la otra hoja) el nombre de la empresa en la celda vacía del costado automáticamente aparezca el número que le corresponde, selecciono otro nombre de empresa de la lista desplegable, la celda del costado cambia a su respectivo número. Es como usar un BUSCARV pero sin que se vean las fórmulas y usando macros.

He buscado tutoriales pero todos son usando un Command Button para realizar la acción :(

Respuesta
1

Es complicado prepara la macro, porque no proporcionas el nombre de las hojas, ni en cuáles columnas está la información, ni en cuál celdas tienes la lista desplegable.

La macro supone que en la columna A tienes los números y en la columna B los nombres.

Veamos si funciona.

Cambia en el código lo siguiente:

- "Hoja2" por el nombre de la hoja donde tienes los números y los nombres de las empresas.

- Cambia "B:B" por la columna donde tienes los nombres de las empresas.

- Si el número está a la derecha del nombre, entonces cambia -1 por 1.

- "A2" por la celda donde tienes la lista desplegable.


Pon el siguiente código en los eventos de la hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2")) Is Nothing Then
    If Target.CountLarge > 1 Then Exit Sub
    Dim f As Range
    Set f = Sheets("Hoja2").Range("B:B").Find(Target.Value, , xlValues, xlwhile, , , False)
    If Not f Is Nothing Then
      Target.Offset(0, 1).Value = f.Offset(0, -1)
    End If
  End If
End Sub

Para poner el código presiona botón derecho en el nombre de la hoja, en el menú que aparece, selecciona Ver código, en el panel que aparece pega el código.


Si tienes alguna dificultad, entonces pon el detalle de cómo está toda tu información, o pon imágenes de tus 2 hojas.

Un pequeño detalle, prueba con esta macro

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2")) Is Nothing Then
    If Target.CountLarge > 1 Then Exit Sub
    Dim f As Range
    Set f = Sheets("Hoja2").Range("B:B").Find(Target.Value, , xlValues, xlWhole, , , False)
    If Not f Is Nothing Then
      Target.Offset(0, 1).Value = f.Offset(0, -1)
    End If
  End If
End Sub

Un error de dedo, puse xlWhile, en lugar de xlWhole.

¡Gracias!  Me funcionó. 
Una consulta. ¿Qué hace Target.CountLarge > 1? 

¿Qué significa Target.Offset(0, 1).Value = f.Offset(0, -1) ?

Muchas gracias por tu ayuda :D

Target.CountLarge > 1

Si modificas más de una celda entonces se sale de la macro.


Target.Offset(0, 1).Value = f.Offset(0, -1)

Target contiene el objeto modificado, en este caso contiene el objeto de la celda, contiene toda la información de celda modificada, en mi ejemplo es la celda A2

. Offset(0,1), significa que debe desplazarse 0 líneas y una columna hacia la derecha.

f.Offset(0, -1)

F contiene el objeto del método Find, si encuentra una celda, entonces f contiene el objeto de la celda, contiene toda la información de la celda encontrada.

Y significa que debe desplazarse 0 líneas y una columna a la izquierda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas