Macro de copia

Necesito una macro que copie la filas impares de una hoja y las pegue en otra. Me gustaría que la macro sea modificable para hacer el mismo ejercicio, pero por ejemplo, que copiara cada 3 filas (1,4,7, etc.), y otros "saltos". Si pudieras ayudarme sería fantástico.

1 respuesta

Respuesta
1
OK. Aquí sigue una macro general que copiará cada N filas.
Como me faltó información sobre lo que quieres, hice algunas suposiciones:
- La cantidad de filas a "saltar" estará indicada en una celda a la cual tendrás que darle un nombre de rango: "salto"
EL valor en ella indicará cuantas celdashacia abajo deberá moverse en cada oportunidad.
Así si quieres copiar solo celdas impares, elegirás -como celda de inicio- una impar y pondrás el valor "2" en la celda "salto", así llegará a otra celda impar.
- El rango de donde tiene que copiar los datos, será determinado por una selección previa que hagas.
Es decir, pinta desde la primer fila a copiar hasta donde termina tu rango de datos. Déjalo seleccionado al disparar la macro.
Ah! Asumí que esta hoja se llama "Hoja1" (¡Qué imaginación la mía!)
- La hoja de destino recibe la copia después de la última celda ocupada en la columna A.
(Esta hoja se llama "Hoja2"
-Se copian filas "completas" de punta a punta.
...
Entonces, pega el siguiente código en un módulo nuevo de Visual basic:
Sub pegaNfilas()
Dim Range2luk As Range
Dim RangeOrig As Range
Dim nextNrow
Set RangeOrig = Selection
nextNrow = 0
Sheets("Hoja2").Select
LastCell = Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(5000, 1)))
Sheets("Hoja1").Select
Do While Not Application.Intersect(RangeOrig, ActiveCell.Offset(nextNrow)) Is Nothing
Application.CutCopyMode = False
ActiveCell.Offset(nextNrow).EntireRow.Copy
Sheets("Hoja2").Select
ActiveSheet.Cells(LastCell + 1, 1).EntireRow.Select
ActiveSheet.Paste
Application.CutCopyMode = False
LastCell = LastCell + 1
nextNrow = nextNrow + Range("salto").Value
Sheets("Hoja1").Select
Loop
Sheets("Hoja2").Select
ActiveCell.Select
Sheets("Hoja1").Select
ActiveCell.Select
End Sub
Cierra el Editor de VBA. Y graba el archivo antes de probarlo (por las dudas, ¿vio?)
Luego selecciona el rango original a copiar y lanza: pegaNfilas
Funciona, hasta donde lo probé. Si hubiera alguna consideración que no me hiciste saber, coméntamela y modificamos el código.
Si estuviera OK, ya sabes qué hacer...
Un abrazo!
Fernando
Creo haber entendido bien, cambié rango por 2, me posecioné en la primera casilla (A1), seleccioné las filas y aparece el depurador:
"error en el método 'range' del objeto global" ¿Qué hice mal?,
PD: el "2" lo reemplacé con y sin "" por si las moscas, e igualmente aparece el mensaje
Repasemos lo que tiene que hacer:
1º Crear un rango en tu hoja que se llame "salto".
Para ello, elige la celda que quieras y presiona "Insertar" | "Nombre" | "Definir" (Ctrl + F3 te lleva a esta misma pantalla). En la casilla superior ingresa "salto" y en la inferior debería figurar la dirección de la celda que recibirá tal nombre.
2º En esa celda ingresa el número de celdas que deberá desplazarse, obviamente sin comillas.
Donde 1 llevará a la fila inmediata siguiente, 2 seleccionará una por medio, etc.
3º Asegúrate que os nombre de hoja de origen y destino estén correctamente escritos
4º Selecciona el rango (no filas completas) desde la primera a considerar hasta donde termine tu área de datos. Déjalo seleccionado.
5º Ejecuta la macro pegaNfilas
Prueba de nuevo y coméntame si funcionó.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas