Macro para copiar valores desde una celda determinada

Necesito su ayuda si no es ninguna molestia para resolver un problema en una macro. El asunto es que en dicha macro los valores me los empieza a copiar desde la celda M2 y yo necesito que los empiece a colocar desde M100 para abajo. Me puede echar un vistazo y decirme que le falta. Llevo poco tiempo con excel pero lo intento.
Muchísimas gracias.
Sub Macro1()
'
' Macro1 Macro
'
'
Range("B3").Select
Selection.Copy
Range("M101").Select
Range("M110").End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C3").Select
Application.CutCopyMode = False
End Sub

1 respuesta

Respuesta
2
Tienes una macro un poco liada en mi opinión. Te empieza a copiar en M2 porque la instrucción "Range("M110").End(xlUp).Select" selecciona la primera celda desde la M110 hacia arriba. Además lo único que te copia es la celda B3.
Aun sin saber lo que necesitas echa un vistazo a este otro código a ver si te resulta más fácil. Esto copia celdas desde B2 a M100, B3 a M101 y así hasta que la celda Bx este vacía.
Sub CopiaMiRango()
Dim origen As Range
Dim destino As Range
Dim c As Range
Dim i As Integer
Set origen = Range(Range("B2"), Range("B2").End(xlDown)) 'selecciona el rango B2 a Bx
Set destino = Range("M100") 'selecciona destino
i = 0
For Each c In origen 'para cada celda en la columna B copia a M
destino.Offset(i, 0).Value = c.Value
i = i + 1
Next c
End Sub
Gracias por tan pronta respuesta.
La macro me da un error 6 desbordamiento
i=i+1
Haber si te puedo explicar mejor.
Lo que yo quería es que me copiara el dato que yo voy a generar con una fórmula que tengo en la celda b3 y cada vez que lanzo la macro me copie ese nuevo dato en una fila a partir de la celda M100.
Un Saludo.
Lo del desbordamiento fue error mio si se pone un solo valor en la celda B2 da el error. La macro funciona pero no es lo que necesito pues esta copia un rango entero y yo lo que quiero es copiar un valor de cada vez .
Bueno creo que ahora entiendo lo que quieres. Una forma algo más elaborada es basar el cambio en eventos en la propia hoja. Para ello en la hoja (no en un modulo) añades el siguiente código. Para añadir código a la hoja seleccionas la hoja en el editor VBA y con el botón derecho la opción Ver código.
Private Sub Worksheet_Calculate()
Static old As Variant
Application.EnableEvents = False
If old <> Range("B3") Then
old = Range("b3")
Call CopioCelda(Range("B3"))
End If
Application.EnableEvents = True
End Sub
Esto hace que al cambiar la hoja por un recalculo se compruebe si cambio la celda B3 y en caso afirmativo se llama a la función CopioCelda.
Ahora sí, en un módulo, definimos la función:
Sub CopioCelda(celda As Range)
Dim destino as Range
If Range("M100").Value = "" Then
Set destino = Range("M100")
Else
Set destino = Range("M65535").End(xlUp).Offset(1, 0)
End If
destino.Value = celda.Value
End Sub
Las fórmulas funcionan a la perfección, pero tienen un problema para mi.
- Si la celda en este caso B3 tiene un numero aleatorio (que es mi caso) entonces no puedes trabajar en el resto de la hoja porque cualquier dato que introdudcas o borres en otro lado automáticamente ella sola recalcula la celda B3 y coloca un nuevo dato a la lista. Por lo menos a mi me pasa eso.
-Tampoco puedo borrar toda la lista, pues al borrarla me mete el primer valor automáticamente y yo necesito borrarla toda, que quede sin ningún valor.
-No puedo integrarla en otra macro que tengo, en ese modulo y tiene que ir ahí, si o si, para poder realizar otras funciones a la par. Al lanzar la macro me crea 15 valores en la lista.
Si tienes otra idea te lo agradezco.
Un Saludo.
Si no quieres o no necesitas el recalculo automático simplemente elimina toda la función de la hoja y no pasará nada con cambios en la hoja. Deja solo la función CopioCelda en el móduly y la llamas como una macro solo cuando la necesites.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas