Macro para copiar si se cumple una condición

Quisiera que por favor me ayudaran con una macro que me recorra una columna en una hoja de cálculo (130,000 filas) y que cuando encuentre una celda con un valor especifico me copie la fila completa en otra hoja. Otra consulta adicional: una hoja de 70 columnas y 130,000 filas es muy grande para manejarse en excel (filtros, buscar valores, etc).

1 respuesta

Respuesta
3

Para poder construir la macro, dime que columna se tiene que recorrer para buscar el valor y a que hoja quieres que copie la fila.

Hola Luis, agradezco tu interés en mi pregunta. La columna a recorrer es la M y el archivo origen esta en la hoja1 y el destino es la hoja2,

Esta es la macro que necesitas. Ejecutala estando en la hoja1, te preguntará el valor a buscar y cuando lo encuentre lo copiará a la hoja 2

(Recuerda finalizar y puntuar mi labor, gracias)

Sub buscar()

filalibre = Sheets("hoja2").Range("m65000").End(xlUp).Row + 1

dato = InputBox("que dato buscamos???")

If dato = "" Then Exit Sub

Set buscado = ActiveSheet.Range("m1:m" & Range("m65000").End(xlUp).Row).Find(dato, LookIn:=xlValues, lookat:=xlWhole)

If Not buscado Is Nothing Then

ubica = buscado.Address

Range(ubica).EntireRow.Copy Destination:=Sheets("hoja2").Cells(filalibre, 1)

End If
End Sub

Hola Luis, probé tu macro y me funciona pero solo me copia la primera fila que encuentra y se detiene. La idea es que recorra toda la hoja (150.000 filas) y copie todas las filas que cumplan el criterio.

Agradezco tu respuesta.

Entiendo. Entonces tu macro es esta:

Sub buscar()
filalibre = Sheets("hoja2").Range("m65000").End(xlUp).Row + 1
dato = InputBox("que dato buscamos???")
If dato = "" Then Exit Sub
Set buscado = ActiveSheet.Range("m1:m" & Range("m65000").End(xlUp).Row).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not buscado Is Nothing Then
ubica = buscado.Address

do

Range(ubica).EntireRow.Copy Destination:=Sheets("hoja2").Cells(filalibre, 1)

filalibre = filalibre +1

Set buscado = ActiveSheet.Range("m1:m" & Range("m65000").End(xlUp).Row).Findnext(buscado)

loop while not buscado is nothing and buscado.address <> ubica

End If
End Sub

Luis probé la segunda macro con un archivo de prueba y la primera fila que encuentra con coincidencia la copia dos veces en la hoja2 y luego de esto termina de ejecutarse.

Agradezco tu respuesta.

Probé nuevamente con otra coincidencia y creo que copia la misma fila tantas coincidencias encuentre. Por ejemplo si le pido que me busque la palabra "residencial" y esta aparece 5 veces en la columna M, me copia en la hoja2 5 veces la primera fila donde encuentre esta palabra.

Espero que entiendas mi explicación y agradezco tu respuesta.

Disculpa faltaba una corrección: (prueba ahora)

Sub buscar()
filalibre = Sheets("hoja2").Range("m65000").End(xlUp).Row + 1
dato = InputBox("que dato buscamos???")
If dato = "" Then Exit Sub
Set buscado = ActiveSheet.Range("m1:m" & Range("m65000").End(xlUp).Row).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not buscado Is Nothing Then
ubica = buscado.Address
do
buscado.EntireRow.Copy Destination:=Sheets("hoja2").Cells(filalibre, 1)
filalibre = filalibre +1
Set buscado = ActiveSheet.Range("m1:m" & Range("m65000").End(xlUp).Row).Findnext(buscado)
loop while not buscado is nothing and buscado.address <> ubica
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas