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
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!
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
- Compartir respuesta