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,
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 de Elsa Matilde
1