Ponerle un bucle a este codigo

hola quisiera si alguien seria tan amable de ver si es posible un bucle a esta macro

de antemano gracias

sub bucle_copiar()

range("H12").select
activeCell.formulaR1C1 = "4"
range("I12").select
activeCell.formulaR1C1 = "5"
range("H13").select
range("B9").select
activesheet.paste
range("D9").select
application.cutCopyMode = False
activeCell.formulaR1C1 = "=sum(rc[-2]:rc[-1])"
range("D9").select
selection.Copy
range("J12").Select
activeSheet.Paste
range("H13").Select
application.CutCopyMode = False
activeCell.FormulaR1C1 = "4"
range("I13").Select
activeCell.FormulaR1C1 = "7"
range("H13:I13").Select
selection.Copy
range("B9:C9").Select
activeSheet.Paste
range("D9").Select
application.CutCopyMode = False
selection.Copy
range("J13").Select
activeSheet.Paste
range("H14").Select
application.CutCopyMode = False
activeCell.FormulaR1C1 = "3"
range("I14").Select
activeCell.FormulaR1C1 = "4"
range("H14:I14").Select
selection.copy
range("B9").Select
activeSheet.Paste
range("D9").Select
application.CutCopyMode = False
selection.Copy
range("J14").Select
activeSheet.Paste
range("H15").Select
application.CutCopyMode = False
activeCell.FormulaR1C1 = "2"
range("I15").Select
activeCell.FormulaR1C1 = "5"
range("H15:I15").Select
selection.Copy
range("B9").Select
activeSheet.Paste
range("D9").Select
application.CutCopyMode = False
selection.Copy
range("J15").Select
activeSheet.Paste
end sub

1 respuesta

Respuesta
1

Para la macro que pusiste no necesitas un bucle.

O no entiendo para que pasas los valores de las celdas "H" e "I" a las celdas "B" y "C".

El resultado que pones al final es en la celda "J" donde sumas el valor de la celda "H" e "I"

Para sumar los valores de la celda "H" e "I" puedes hacerlo así, si necesidad de poner los valores en "B" y "C"

Sub valores()
'Por.Dante Amor
    Range("H12:J12") = Array(4, 5, "=sum(rc[-2]:rc[-1])")
    Range("H13:J13") = Array(4, 7, "=sum(rc[-2]:rc[-1])")
    Range("H14:J14") = Array(3, 4, "=sum(rc[-2]:rc[-1])")
    Range("H15:J15") = Array(2, 5, "=sum(rc[-2]:rc[-1])")
End Sub

Si no es lo que necesitas, tendrías que explicarme por qué pasas los datos a las columnas "B" y "C"

hola la verdad es pasar los datos que uno ingresa a las celdas del libro1  que son estas

("H12:I12") ,("H13:I13") ,("H14:I14"),("H15:I15") 


despues de ingresarlas ejecutar la macro y que la columna ("H12:I12") llegue a las celdas(b9:c9) que haga la suma en ("d9") y esa suma la pegue en la casilla (j12)

despues ingresar el segudo dato en la columna ("H13:I13") y que reemplace los valores de (b9:c9) a estos nuevos los sume y lleguen a j13 y ahi sucesivamente la verdad yo pondria un copy pero me pidieron que con un bucle ya que es para llegar a algo mas pesado todavia ojala me ayudes y me entiendas de ante mano muchas gracias

dante amor saludos :D

Todavía no entiendo para qué llevar los datos a otras celdas hacer la suma en D9 y esa suma pasarla a J12, si puedes hacer directamente la suma en J12.

Este sería un ejemplo de un ciclo, para ejecutar la macro tendrás que poner un botón o ejecutarla desde VBA.

Sub pasar()
'Por.Dante Amor
    For i = 12 To 15
        Range(Cells(i, "H"), Cells(i, "I")).Copy Range("B9")
        Range("D9") = "=sum(B9:C9)"
        Range("D9").Copy Cells(i, "J")
    Next
End Sub

Lo que hace el ciclo es leer las celdas "H12:I12" las copia a "B9:C9", pone la fórmula de suma en la celda "D9" y por último copia la fórmula en "J12"; lo mismo para "H13:I13", "H14:I14" y "H15:I15"

El ciclo se detiene en H15 porque solamente va desde la fila 12 hasta la fila 15, pero puedes aumentar el número de filas en esta línea de la macro, por ejemplo, puede llegar desde la fila 12 hasta la fila 500:

For i = 12 To 500


Este es otra macro. Si quieres que la macro se ejecute automáticamente después de poner datos en las celdas H e I, utiliza la siguiente macro dentro de los eventos de worksheet.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("H:I")) Is Nothing Then
        If Target.Row >= 12 Then
            Range(Cells(Target.Row, "H"), Cells(Target.Row, "I")).Copy Range("B9")
            Range("D9") = "=sum(B9:C9)"
            Range("D9").Copy Cells(Target.Row, "J")
        End If
    End If
End Sub

Lo que hace esta macro es leer los datos de H y de I y copiarlos a B9 y C9, después pone la suma en D9 y por último copia D9 a J, todo lo hace de forma automática después de que ingresas un número en H o en I.


Saludos. Dante Amor

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas