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 de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
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