Búsqueda de datos en una tabla con VB

Hola!
Estoy intentando crear una macro que asigne una valor en la columna de al lado de un determinado dato. Ese dato es una referencia sobre la que está posicionado el cursor al ejecutar la macro
La macro es la siguiente:
Sub referencias()
Dim Referencia As String
Referencia = ActiveCell.Value
Range("B2").Select
While ActiveCell.Value <> ""
If ActiveCell.Value <> Referencia Then
ActiveCell.Offset(1, 0).Range("A1").Select
Else
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Vendido"
ActiveCell.Offset(1, -1).Range("A1").Select
End If
Wend
End Sub
La macro funciona, pero es lenta cuando hay muchas filas. Por ejemplo, para asignar la palabra "vendido" a tres filas en una tabla con + de 20000 registros, puede tardar hasta un minuto, pues va recorriendo celda por celda.
Sin embargo, con la opción "buscar" la cosa va mucho más rápida, pero no sé decirle a la macro que pare cuando haya recorrido todas las celdas (ya sabéis que cuando buscamos algo con CTRL+F, si le sigues dando a buscar siguiente, vuelve a empezar desde el principio en un bucle infinito.
Esta es la macro que he creado, pero no funciona por lo del bucle, pues vuelve a empezar indefinidamente:
Sub referencias()
Dim referencia As String
match = ActiveCell.Value
Range("A2").Select
While ActiveCell.Value <> ""
Cells.Find(What:=referencia, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Vendido"
ActiveCell.Offset(1, -2).Range("A1").Select
Wend
End Sub
¿Cómo puedo decirle que sólo haga una pasada?
Muchas gracias,

1 Respuesta

Respuesta
1
Ninguna de las 2 es la forma correcta.
Probá con ésta. Ajustale previamente el rango de búsqueda:
Sub referencias()
'x Elsamatilde
Dim referencia As String
referencia = ActiveCell.Value
Set busco = ActiveSheet.Range("A2:A20000").Find(referencia, LookIn:=xlValues, LookAt:=xlWhole)
'si lo encontró coloca los valores en col sgte
If Not busco Is Nothing Then
busco.Offset(0, 1).Value = "Vendido"
'ActiveCell.Offset(1, -2).Range("A1").Select
Else
MsgBox "No se encontró el dato buscado"
End If
'libero la variable
Set busco = Nothing
End Sub
PD) Mis manuales de macros son una buena opción para no perder tiempo. 300 pág de contenido ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas