Macro que permita copiar cualquier celda seleccionada

Un ejemplo. Tengo seleccionada la celda A1 y al darle clic al botón quiero que copie lo que esta escrito a la celda de abajo y al darle clic otra vez lo copie en la celda que sigue y así sucesivamente. Lo importante es que tiene que permitir hacerlo con cualquier celda. Por ejemplo. La celda A1 ya la copie 5 veces o las que sea y ahora en la A6 escribo otra cosa y quiero copiarlo mas veces dándole clic al mismo botón.

1 respuesta

Respuesta
1

Ingresá al Editor de macros (atajo ALT y F11)

Insertá un módulo y allí copiá el siguiente código.

Dibujá un botón con la barra Formulario. Clic derecho sobre el botón, opción 'Asignar macro' y le asignás la que acabas de copiar.

Sub botoneando()
'x Elsamatilde
'se copia la celda seleccionada hacia abajo
'si la celda está vacía o hay + de 1 celda seleccionada no se ejecuta
If ActiveCell = "" Or Selection.Count > 1 Then Exit Sub
'se mira si la celda siguiente está vacía, sino se busca la primer celda libre hacia abajo
If ActiveCell.Offset(1, 0) = "" Then
    ActiveCell.Copy Destination:=ActiveCell.Offset(1, 0)
Else
    libre = ActiveCell.End(xlDown).Offset(1, 0).Row
    ActiveCell.Copy Destination:=Cells(libre, ActiveCell.Column)
End If
End Sub

Excelente! Nada más que quisiera que me permitiera seleccionar las celdas A, B y C que son las que ocupo para escribir. De ante mano muchas gracias si me funciono

¿O sea que el botón NO ejecute la macro si la celda seleccionada se encuentra en otra columna?

Si es así, agrega esta línea al inicio:

If ActiveCell.Column > 3 Then Exit Sub

Sdos!

Perdón, creo que no me explique bien. La macro si cumple la función que necesito pero quiero que me deje copiar el contenido de las celdas A, B y C al mismo. espero haberme explicado mejor :)  

¿Tienes qué decirlo TODO desde un principio?

'... Tengo seleccionada la celda A1 y al darle clic al botón... '

Si hubieras dicho A1:C1 ya estaría resuelto.

¿Es decir que siempre seleccionarás las 3 celdas antes de darle al botón?

¿Las 3 van juntas? ¿Es decir que si llegaste hasta la fila 5 luego LAS 3 irán a la fila 6?

Perdón, soy nuevo en esto. Como le decía, la función de la macro esta bien, lo que quiero es que al oprimir el botón tiene que copiar lo que esta escrito en las celda A, B y C no nada mas lo de la celda A. Me disculpo y espero ahora si darme a entender. Gracias

No hay problemas, solo te lo comento viendo que eres nuevo, para que trates de plantear la situación tal como es en tu modelo... si la plantean mal sale la respuesta mal... y todos perdemos tiempo.

Bien, te dejo 2 opciones:

1- Que siempre copies el rango A2:C2 junto. Aquí utilizo CurrentRegion porque veo que no hay columnas a continuación:

Sub todoJunto()
filx = Range("A2").CurrentRegion.Rows.Count + 1
Range("A2:C2").Copy Destination:=Range("A" & filx)
End Sub

2- que vayas copiando según necesites, A, B o C:

Sub xColumna()
filx = ActiveCell.CurrentRegion.Rows.Count + 1
ActiveCell.Copy Destination:=Cells(filx, ActiveCell.Column)
End Sub

Sdos y si el tema quedó resuelto no olvides valorar la respuesta (opciones: excelente o buena)

Elsa

Le agradezco su ayuda y le pido una disculpa por no darme a entender. La primer macro que me envió esta perfecta para lo que necesito y mi error en la pregunta principal fue decir esto  (La celda A2 ya la copie 5 veces o las que sea y ahora en la A7 escribo otra cosa y quiero copiarlo mas veces dándole clic al mismo botón.) cuando en realidad tuve que haberlo escrito así (La celda A2, B2 y C2 ya las copie 5 veces o las que sea y ahora en la A7, C7 y B7 escribo otra cosa y quiero copiarlo mas veces dándole clic al mismo botón.) Nuevamente me disculpo y agradezco su paciencia y ayuda

Tenés que seleccionar el rango y presionar el botón tantas veces como lo necesites.

Sub todoJunto()
'x Elsamatilde
'opcional: verifica que se esté seleccionando rango en A:C
    If Selection.Column > 1 Or Selection.Row = 1 Or Selection.Count > 3 Then Exit Sub
'ubica la siguiente fila libre y pega la selección
    filx = Range("A2").CurrentRegion.Rows.Count + 1
    Selection.Copy Destination:=Range("A" & filx)
End Sub

Exacto, eso es lo que quiero! nada mas la ultima pregunta. Hay forma de que se seleccionen solas las celdas a, b, c?  por ejemplo en la imagen que me mando usted, lo único que tendría que hacer yo es seleccionar a2 y al oprimir el botón se copian a, b y c  en el caso de la imagen hasta el a4 después en a5 escribo otro producto y nada mas conque este seleccionada a5  oprimo el botón y se copien a, b, c correspondientes a a5. Lo único que le hace falta a esta macro es eso. muchas gracias

Sub todoJunto()
'x Elsamatilde
'opcional: verifica que se esté seleccionando rango en A:C
    If Selection.Row = 1 Or Selection.Column > 3 Or Selection.Count > 3 Then Exit Sub
'ubica la siguiente fila libre y pega la selección
    filx = Range("A2").CurrentRegion.Rows.Count + 1
    Range("A" & ActiveCell.Row & ":C" & ActiveCell.Row).Copy Destination:=Range("A" & filx)
End Sub

Ahora sí por favor valora y la damos por cerrada. Cualquier otro cambio que sea en nueva consulta.

Sdos!

¡Gracias!  Excelente atención y paciencia Saludos

Buenas tardes señora Elsa. Tengo un problema con la macro que hizo favor de hacerme. El detalle esta en que en las celdas D puse un comando para que copiara con asteriscos al principio y al final lo escrito en su respectiva letra A y ahora cuando cuando quiero copiar ya no me los copia. No quiero que copie las celdas D Esas copian automáticamente lo que escribo en las celdas A lo que quiero es que me vuelva a copiar como  antes de añadir las celdas D. esta es la macro que estoy usando. Gracias y saludos

Sub COPIAR_VARIOS()
'x Elsamatilde
'opcional: verifica que se esté seleccionando rango en A:C
If Selection.Row = 1 Or Selection.Column > 3 Or Selection.Count > 3 Then Exit Sub
'ubica la siguiente fila libre y pega la selección
filx = Range("A2").CurrentRegion.Rows.Count + 1
Range("A" & ActiveCell.Row & ":C" & ActiveCell.Row).Copy Destination:=Range("A" & filx)
End Sub

Deja una nueva consulta en el tablón... me es imposible continuarla ahora y menos con el tiempo ya transcurrido.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas