Macro copiar datos de una fila a otra

Buenos días tengo esta macro, que me permite agregar una fila en la intentar que me encuentre , bueno quiero que donde me adicione la fila en blanco me copie los datos de la fila anterior incluyendo formulas , es urgente porfaaaaaaaaa

Sub añadir_fila()
Dim hoja_tabla As Worksheet
Dim existe As Boolean
Dim I, N_filas, N_porticos, grupo As Single
' N_filas es la cantidad de filas de la tabla actual
' N_porticos es la cantidad de pórticos
Set hoja_tabla = ActiveSheet
Application.ScreenUpdating = False
'=======================================================
'Ahora va a calcular la cantidad de filas en la tabla
'(deposita el valor en la variable N_filas).
'-------------------------------------------------------
'Verifica que exista hoja llamada "REMU+GRAT"
existe = False
For I = 1 To Sheets.Count
If Sheets(I).Name = "REMU+GRAT" Then
existe = True
Exit For
End If
Next
'Si no existe, no puede trabajar
If existe = False Then
MsgBox "No existe hoja llamada 'REMU+GRAT'. No se puede ejecutar la Macro.", vbQuestion
Exit Sub
End If
'Si llegó hasta aquí es porque existe la hoja "REMU+GRAT"
N_porticos = Sheets("REMU+GRAT").Cells(567, 2) '<-- dato en celda B3
N_filas = 0
For I = 1 To N_porticos
N_filas = N_filas + Sheets("REMU+GRAT").Cells(568 + I, 2)
Next
'=========================================================
'Ahora vamos a agregar la nueva fila al pórtico actual.
'Lo primero es saber si la fila de la celda activa está
'dentro del grupo de algún pórtico. El rango de filas de la tabla
'se extiende desde la fila 5 hasta la fila 4 + N_filas
hoja_tabla.Activate
fila = ActiveCell.Row
If fila < 5 Or fila > 4 + N_filas Then
'Se encuentra fuera del rango de la tabla, entonces salimos sin
'hacer nada. Pero ...
Exit Sub
End If
'... Si no salió, es porque estamos dentro de rango.
'Ahora a determinar a cuál grupo pertenece la fila de la celda activa
grupo = 1
Sheets("REMU+GRAT").Activate
suma_parcial_filas = 0
For I = 1 To Range("B567") '<-- contiene la cantidad de METAS
suma_parcial_filas = suma_parcial_filas + Cells(I + 568, 2)
If fila > 4 + suma_parcial_filas Then
grupo = grupo + 1
Else
Exit For
End If
'Se usa un proceso iterativo: La variable suma_parcial_filas lleva
'la suma de las filas de los grupos recorridos, desde el primero hasta
'el último (según los datos de la hoja ).
'Si nuestra fila excede a la suma de las filas de los grupos ya recorridos,
'el grupo al que pertenece debe ser el siguiente.

Next
'Note ahora que suma_parcial_filas + 4 es la última fila del grupo a que
'pertenece fila
hoja_tabla.Activate
Rows(4 + suma_parcial_filas).Insert Shift = xlDown
'Al insertar fila la secuencia de numeración se descompleta.
'Vamos a acomodarla
suma_parcial_filas = suma_parcial_filas + 1 '<-- importante!!!
Cells(4 + suma_parcial_filas, 1).Select
ActiveCell = ActiveCell.Offset(-2, 0) + 2
ActiveCell.Offset(-1, 0) = ActiveCell.Offset(-2, 0) + 1
'Ahora, actualiza los valores en hoja "REMU+GRAT" (porque se añadió
'una fila al grupo elegido)
Sheets("REMU+GRAT").Activate
Cells(568 + grupo, 2) = Cells(568 + grupo, 2) + 1
hoja_tabla.Activate
End Sub

Respuesta
1

No sé si te quedó claro, así que voy a explayarme un poco aquí

Tenés la instrucción donde insertás la fila:

Rows(4 + suma_parcial_filas).Insert Shift = xlDown


Esto hace que si la variable es 3 tendrás una fila vacía en 7, por lo que querrás arrastrar de la 6 hasta la 7:

Entonces en la instrucción que te pasé el rango se selecciona desde :

"B" & 3+suma_parcial_fila y llega hasta 4+suma .......

¿Quedó claro? Si es así no olvides finalizar las 2 consultas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas