Copiar pegar en una celda vacía Excel macros

En Excel con Macro, copiar una celda y pegar en
otra celda a partir de D40 si esta "vacía" que copie sino que copie
en la siguiente celda de abajo vacía, así sucesivamente con todas las copias que se
hacen.

2 Respuestas

Respuesta
4
Me guio por el titulo de la pregunta, poniéndote un ejemplo ya que la mitad del párrafo está en lenguaje hpml por lo menos je je.
1. Agregamos un botón de comando y damos doble clic para colocar la programación del mismo.
'Suponemos que la celda que queremos copiar es la celda A1 del libro activo ok? y la vamos a copiar a partir de D40 si esta está vacía y sino que la compi en la celda siguiente de la misma columna.
'Comenzamos:
Private sub commandButton click()
'Activamos la hoja 1 del libro activo:
Sheets("hoja1").Activate
'Nos vamos a la celda de la que queremos copiar el contenido y la seleccionamos.
Activesheet.range("a1").Select
'Copiamos el contenido de la celda.
Selection.copy
'Nos vamos a la hoja 2 del libro activo y la activamos.
Sheets("hoja2").Activate
'Activamos la celda d39 que se supone tiene titulo del contenido de las celdas.
Activesheet.range("d39").activate
'Mientras la celda no este vacía, que baje una fila y active la celda siguiente
Do while activecell isEmpty(Activecell)
Activecell.offset(1,0).Activate
Loop
'Una vez encuentra una celda vacia que pegue el contenido de la celda copiada anteriormente de la hoja anterior.
Selection.Paste
End Sub
Mira a ver si te sirve ese código. Una cosa, si quieres cambiar el nombre del botón de comando que agregamos en la hoja 1, damos botón derecho sobre el botón, damos a modificar y cambiamos el nombre del botón por ejemplo por Copiar datos.
Esto es todo, dime si te sirvió y no olvides finalizar la pregunta.
Hola estoy muy agradecido por tu tiempo, esfuerzo y paciencia... la respuesta es simple y no me gusta... ... me encanta ;-), en lo personal siempre digo que, "en lo simple se encuentra la belleza". Y te haz guiado bien por el titulo.
Pero lo siento cuando corro la macro me sale un error en sintaxis en:
Do while activecell isEmpty(Activecell) no tengo idea de este lenguaje pero se entiende cuando lo explicas me gusta, así se aprende gracias.
He cambiado el rango de celda y el nombre de las hoja(s) activa.
Me preguntaba también si se puede eliminar los duplicados que se genere de dicha copia, el rango seria ("d40:ab80") dentro de la misma macro.
Sub combinacion2()
'combinacion2 Macro
'combinacion2
'Activamos la hoja 1 del libro activo:
Sheets("arbeiten").Activate
'Nos vamos a la celda de la que queremos copiar el contenido y la seleccionamos.
ActiveSheet.Range("C3:AA3").Select
'Copiamos el contenido de la celda.
Selection.Copy
'Nos vamos a la hoja 2 del libro activo y la activamos.
Sheets("arbeiten").Activate
'Activamos la celda d39 que se supone tiene titulo del contenido de las celdas.
ActiveSheet.Range("d39").Activate
'Mientras la celda no este vacía, que baje una fila y active la celda siguiente
Do while activecell isEmpty(Activecell)
ActiveCell.Offset(1, 0).Activate
Loop
'Una vez encuentra una celda vacia que pegue el contenido de la celda copiada anteriormente de la hoja anterior.
Selection.Paste
End Sub 
P.D:. muchísimas gracias de nuevo.
Si cierto la esta mal escrita la macro, lo siento. La macro seria la siguiente:
Sub combinacion2()
'combinacion2 Macro
'combinacion2
'Activamos la hoja 1 del libro activo:
Sheets("arbeiten").Activate
'Nos vamos a la celda de la que queremos copiar el contenido y la seleccionamos.
ActiveSheet.Range("C3:AA3").Select
'Copiamos el contenido de la celda.
Selection.Copy
'Nos vamos a la hoja 2 del libro activo y la activamos.
Sheets("arbeiten").Activate
'Activamos la celda d39 que se supone tiene titulo del contenido de las celdas.
ActiveSheet.Range("d39").Activate
'Mientras la celda no este vacía, que baje una fila y active la celda siguiente
Do while not isEmpty(Activecell)
ActiveCell.Offset(1, 0).Activate
Loop
'Una vez encuentra una celda vacía que pegue el contenido de la celda copiada anteriormente de la hoja anterior.
Selection. Paste
End Sub 
P.D. Te explico este lenguaje se lee de derecha a izquierda, en este caso los parámetros serian:
Mientras no este vacía: Eso se lo decimos al programa con la instrucción:
Do While not isEmpty
Ese not nos indica que no este vacía.
Pero... que es lo que le indicamos mienetras no este vacía... ¿el qué? Pues la celda activa, eso se lo decimos con la instrucción entre paréntesis (Activecell)
Con no cual nos quedaría así:
Mientras la celda activa no este vacía:
Do While not IsEmpty(Activecell)
Ahora con la instrucción offset se indicamos que baje una linea de manera que nos quedaría
Activecell. offset(1,0). Activate
Los números entre paréntesis nos indican el primero la fila y el segundo la columna.
De esta forma por ejemplo nos quedaría, si partimos de A1 y suponemos que la celda activa es la A1, con el comando offset le decimos a la macro que nos lleve una fila hacia abajo con ese (1,0), es decir, baja una fila pero mantente en la misma columna.
Si por el contrario queremos llevar el cursor una lugar a la derecha seria al revés:
Offset.(0,1), es decir mantente en la misma fila pero coloca el cursor una columna a la derecha.
Por otro lado si queremos llevar el cursor hacia arriba o hacia la izquierda los nuemos serían en negativo.
No se si me explique, si tienes alguna duda me comentas.
Respuesta
1

Tengo el siguiente codigo el problema es que quiero un ciclo para que vaya pegando en una fila abajo cada que ingrese uno nuevo podrianayudarme

Sub guardar()

Worksheets("COMANDA"). Range("B1"). Copy
Worksheets("datos"). Range("A2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D1"). Copy
Worksheets("datos"). Range("B2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("A3"). Copy
Worksheets("datos"). Range("C2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("B5"). Copy
Worksheets("datos"). Range("D2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D5"). Copy
Worksheets("datos"). Range("E2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("B7"). Copy
Worksheets("datos"). Range("F2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D7"). Copy
Worksheets("datos"). Range("G2"). PasteSpecial xlPasteAll

Application.CutCopyMode = False

End Sub

Sub guardar()

Worksheets("COMANDA"). Range("B1"). Copy
Worksheets("datos"). Range("A2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D1"). Copy
Worksheets("datos"). Range("B2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("A3"). Copy
Worksheets("datos"). Range("C2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("B5"). Copy
Worksheets("datos"). Range("D2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D5"). Copy
Worksheets("datos"). Range("E2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("B7"). Copy
Worksheets("datos"). Range("F2"). PasteSpecial xlPasteAll

Worksheets("COMANDA"). Range("D7"). Copy
Worksheets("datos"). Range("G2"). PasteSpecial xlPasteAll

Application.CutCopyMode = False

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas