Copiar varias filas a otra hoja con bucle VBA Excel

Los expertos

Me pregunta es la siguiente, tengo un hoja para el horario de trabajo y lo que quiero es copiar todos filas con los nombres, los días de trabajo y hora a otra hoja, quisiera hacer un bucle que me copie todas las filas donde encuentre datos, en la hoja donde se van a copiar que busque la ultima fila libre y los copie allí, en la hoja origen cuando valla recorriendo fila por fila cuando encuentre una fila vacía se detenga el bucle .

1 respuesta

Respuesta
1

No está muy claro el rango a copiar... mencionas que '... copie todas las filas donde encuentre datos...' ¿eso da idea de que puede haber filas vacías?

¿Pero luego mencionas que al encontrar una fila vacía se detenga el bucle... me lo podes aclarar?

Podrías copiar como rango, no por fila. Por ej: según la imagen, como la col A tiene datos aunque en el resto de col no, se copia el rango A2:C7, con la macro siguiente:

Sub copia1()'x Elsamatilde'se establece cual es la 1er fila libre en Hoja2, col Afilx = Sheets("Hoja2").Range("A" & Rows.coun).End(xlUp).Row + 1'se copia el rango de datos según col A a la hoja2Range("A2:C" & Range("A" & Rows.Count).End(xlUp).Row).Copy _Destination:=Sheets("Hoja2").Range("A" & filx)End Sub

Si esto responde a tu modelo, no olvides valorar la respuesta. De lo contrario aclara o sube una imagen de cómo se encuentran tus filas a copiar.

Perdón acá mando un imagen Elsa, de antemano gracias lo que quiero hacer es pasar unas filas a otra hoja y pero las algunas celdas de esas filas irán en otro orden de celdas en l atra hoja

Bien, entonces entra al Editor de macros, inserta un módulo y allí copia esta rutina:

Sub copiaFilas()
'x Elsamatilde
'trabaja en Hoja1 copiando datos a Hoja2
Set h2 = Sheets("Hoja2")
'primer fila destino
filx = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
'se guarda para tener el rango
fil1 = filx
Sheets("Hoja1").Select
Range("B7").Select
'recorre la col hasta encontrar celda vacía
While ActiveCell <> ""
'pasa cada dato a cada col destino
h2.Range("A" & filx) = Range("I4")
h2.Range("B" & filx) = ActiveCell
'recorre la fila desde col 3 hasta 9, x =3 en saltos de 2
x = 3
For i = 3 To 9
If Cells(ActiveCell.Row, i) <> "" Then
    h2.Cells(filx, x) = Cells(6, i)
    h2.Cells(filx, x + 1) = Cells(ActiveCell.Row, i)
    x = x + 2
End If
Next i
'incremento fila destino
filx = filx + 1
'pasa a fila sgte en Hoja1
ActiveCell.Offset(1, 0).Select
'repito el bucle
Wend
End Sub

Se puede ejecutar desde un botón dibujado en la hoja1, con un atajo de teclado o desde el mismo menú Macros. Estos temas los tengo explicados en detalle en la sección Macros de mi sitio.

Sdos y no olvides valorar la respuesta si el tema queda resuelto.

Elsa

¡Gracias! Ya lo probé pero me dice que h2= sheet2("hoja2" ) " Variable not defined"

Aca lemando una 

imagen

Seguramente en tu Editor necesitas declarar las variables. Podes comprobarlo desde el menú Herramientas, Opciones. Al quitar el tilde ya podrás probar la macro.

De todos modos te paso la declaración de las que utilicé en esta rutina. El inicio de la macro quedaría así:

Sub copiaFilas()
'x Elsamatilde
Dim h2
Dim filx As Long, fil1 As Long
Dim x As Byte, i As Byte
'trabaja en Hoja1 copiando datos a Hoja2
'a partir de aqui ya no hay cambios

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas