Macro para copiar y pegar en la fila siguiente según valor en la celda de la misma fila

Con la macro, se espera desglosar el año inicial como en el ejemplo, si en la columna año inicial de X fila comienza en 2002 y año final termina 2008, copiar fila completa, insertar y pegar en la fila siguiente el año que sigue, sumarle a 2002 +1, quedaría como año inicial 2003 - año final 2008, el año final no se movería, ya que de cada fila es la condición, continuar con las siguientes filas hasta que sean iguales ambas celdas, año inicial 2008 - año final 2008, que se pueda aplicar a toda la hoja ya que son un buen de filas con el mismo desglose.
Las filas amarillas es la base a tomar para el desglose
Las filas verdes, serían el resultado de la macro
La columna de azul es la suma +1 de el año inicial hasta que llegue a tener el mismo valor que la columna roja, año final.
La columna de rojo es la condición.

1 Respuesta

Respuesta
1

H0la Fernando:

No es complicado lo que pides, así que te voy a orientar un poco.

  1. Lo que debes hacer es un bucle que te lleve hasta el final de tu tabla, hay varias formas de hacerlo, pero te sugiero un "Do Until" que itere hasta que encuentre una celda vacía.
  2. El valor de una celda, ejemplo la H3, lo obtienes con Range("H3").value
  3. La fila iésima de la columna H la puedes consultar con Range("H" & i).value
  4. Realiza la comparación para ver si tu criterio se cumple.
  5. Para obtener el código que inserta una fila, enciende el grabador de macros e inserta una fila, entonces puedes ver el código resultante que será la base para armar tu sentencia.

Intenta crear algo con esos indicios y veamos qué resulta.

Recuerda que es mejor aprender a pescar que recibir el pescado.

¡Gracias! me pongo a investigar los datos que me enviaste, saludos

En realidad, tiene sus complicaciones.

Te dejo la forma en que lo resolví.

Sub copiarFilas()
    'Por GP'
    Dim i As Long, j As Integer, difCol As Integer
    i = 1 'inicializar la fila en que se comenzará la búsqueda'
    'Iniciar el bucle hasta encontrar una celda vacía'
    Do Until (Range("H" & i).Value = "")
        'Determinar el número de filas a completar'
        difCol = Range("I" & i).Value - Range("H" & i).Value
        'Completar las filas faltantes'
        For j = 1 To difCol
            Range("A" & (i) & ":K" & (i)).Copy 'Copiar filas'
            Range("A" & (i + j)).Insert Shift:=xlDown 'Insertar en la fila siguiente'
            Range("H" & (i + j)).Value = Range("H" & i).Value + j 'Modificar el valor de en H'
        Next
        'Pasar a la nueva fila que se debe revisar'
        i = i + j
    Loop
    Application.CutCopyMode = False
End Sub

S@lu2

Funciono muy bien, realmente se me estaba dificultando armar el código, pero gracias a que te diste tiempo de analizar y a tus conocimientos, quedo perfecto, gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas