Macro que copie de una hoja a otra datos con variables especificas

Acudo a ustedes con una duda que me da vueltas a la cabeza y no he podido resolver, quiero copiar datos de una base de datos a otra hoja, siempre y cuando reúna las
condiciones de 3 variables, ejemplo tengo una base de datos como sigue:
Empresa informe tipo año pago
motitas 1 comercio 1998 efectivo
sudyem 1 servicios 3006 cheque

Nugget 3 comercio 2012 efectivo

Telcak 1 comercio efectivo

Lo que quiero es que copie a otra hoja unicamente las empresas que pertenezcan al informe numero 1, que sean de tipo comercio y que el pago lo hayan realizado en efectivo, en este caso seria solo las empresas motitas y Telcak. ¿Cómo le hago?

Les agradezco enormemente su ayuda y les envío un cordial saludo.

Respuesta
1

Te dejo la macro, la debes copiar como módulo en VBA, (presionas Alt+F11 y creas un módulo y allí lo pegas).

Estoy asumiendo que tus datos origen están en la Hoja1 y los copiaras a la Hoja2.

Sub Ordenar()
Sheets("Hoja1").Select
'la variable fila guarda el número de filas que tiene la hoja origen
fila = Cells(65536, 1).End(xlUp).Row
'copiemos primero los títulos
Cells(1, 1).Select
ActiveCell.EntireRow.Select
Selection.Copy
Worksheets("Hoja2").Select
'Asignemos una variable de la fila utilizada en la hoja destino
Filacopia = 2 'significa que ya utilizamos la primera fila y que la siguiente a copiar sera la 2
For i = 1 To fila
Sheets("Hoja2").Select
Cells(i + 1, 1).Select
If ActiveCell.Offset(0, 1) = "1" And ActiveCell.Offset(0, 2) = "COMERCIO" Then
ActiveCell.EntireRow.Select
Selection.Copy
Worksheets("hoja5").Select
Cells(filacopia, 1).Select
ActiveCell.PasteSpecial
filacopia = filacopia + 1
End If
Next
End Sub

Podríamos hacerla mas compleja, asignándole variables en el procedimiento para cada caso que quieras filtrar, pero por ahora dejémoslo asi...

Ya me cuentas si te sirvió.

Sorry, te mando el código corregido.

Sub Ordenar()
Sheets("Hoja1").Select
'la variable fila guarda el número de filas que tiene la hoja origen
fila = Cells(65536, 1).End(xlUp).Row
'copiemos primero los títulos
Cells(1, 1).Select
ActiveCell.EntireRow.Select
Selection.Copy
Worksheets("Hoja2").Select
Cells(1, 1).Select
ActiveCell.PasteSpecial
'Asignemos una variable de la fila utilizada en la hoja destino
filacopia = 2 'significa que ya utilizamos la primera fila y que la siguiente a copiar sera la 2
For i = 1 To fila
Sheets("Hoja1").Select
Cells(i + 1, 1).Select
If ActiveCell.Offset(0, 1) = "1" And ActiveCell.Offset(0, 2) = "COMERCIO" Then
ActiveCell.EntireRow.Select
Selection.Copy
Worksheets("hoja2").Select
Cells(filacopia, 1).Select
ActiveCell.PasteSpecial
filacopia = filacopia + 1
End If
Next
End Sub

Muchísimas gracias por tu macro, funciona muy bien, pero me acaba de surgir una duda que no tenia hasta ejecutar la macro, en caso de que solo quiera copiar algunas columnas de la fila en donde se encuentra la empresa elegida, ¿que puedo poner en vez de la orden etirerow.select, la cual supongo se refiere a selecciona todo el renglón para copiarlo, es decir, una vez seleccionada la empresa que reúna las características de informe 1, "comercio" y "efectivo", que de esa empresa solo copie, por ejemplo los datos que se encuentran en la columna "b", "g" y "s", ¡¿¿¿sera un select de celdas active offset??? o como podría realizarlo.

Mil gracias por tu atención y por compartir tu conocimiento :)

En caso quieras copiar solo algunas columnas, puedes hacerlo individualmente (por celdas) con Activecell. Offset(x, y), pero asegurate de tener claro en que columna lo copiaras:

Cells(filacopia, columna).Select ActiveCell.PasteSpecial

Donde columna será el número de la columna donde copias cada celda.

Activecell.offset(0,2).Select 'copias la B

Selection.Copy

Worksheets("hoja2").Select

Cells(filacopia, 1).Select 'vas a la columna A de la hoja destino

ActiveCell.PasteSpecial 'copias en la columna A de la hoja destino

Sheets("hoja1").select 'vuelves a la hoja a copiar

Activecell.offset(0,7).Select çopias la G
Selection.Copy
Worksheets("hoja2").Select
Cells(filacopia, 2).Select
ActiveCell.PasteSpecial

Sheets("hoja1").select 'vuelves a la hoja a copiar

...

filacopia = filacopia + 1

End If

Con eso copias cada columna que quieras independientemente.

Ya me cuentas si funciona, y no olvides de cerrar la pregunta si piensas que todo esta resuelto.

MIL GRACIAS, HASTA ESTE MOMENTO ME FUNCIONO PERFECTAMENTE, ES JUSTO LO QUE NECESITABA, TE AGRADEZCO MUCHO COMPARTIR TUS CONOCIMIENTOS Y EL TIEMPO QUE TOMASTE PARA CONTESTAR MI PREGUNTA, TE MANDO UN CORDIAL SALUDO, ESPERO QUE TENGAS MUCHO ÉXITO EN LO QUE TE PROPONGAS Y GRACIAS NUEVAMENTE.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas