Macros para insertar filas según condición y copiar datos de filas

Quisiera saber si me podrían ayudar con la creación de una macro para lo siguiente. Tengo una base de datos:

Año Nombre Programa PPTAL Proyecto Departamento Provincia #Distritos

2017 Gobierno Nacional 0042 2001621 La Libertad Chepén 3

Y quisiera que, de acuerdo al # de la columna Distrito, se inserten filas, en ese caso serían 3. Después, que se copien los datos que tiene la fila original, quedando así:

Año Nombre Programa PPTAL Proyecto Departamento Provincia #Distritos

2017 Gobierno Nacional 0042 2001621 La Libertad Chepén 3 ---> Siendo este el original

2017 Gobierno Nacional 0042 2001621 La Libertad Chepén 3 ---> Copia 1

2017 Gobierno Nacional 0042 2001621 La Libertad Chepén 3 ---> Copia 2

2017 Gobierno Nacional 0042 2001621 La Libertad Chepén 3 ---> Copia 3

Cabe resaltar que la columna #Distritos tiene valores desde 3 hasta 34

1 Respuesta

Respuesta
2

Suponiendo tus datos en la "Hoja4" de esta manera:

Los resultados en la "Hoja5"

Cambia en la macro "Hoja4" y "Hoja5" por los nombres de tus hojas.

Sub insertar_filas()
  Dim a As Variant, b As Variant, sh As Worksheet
  Dim i As Long, j As Long, k As Long, m As Long, n As Long
  '
  Set sh = Sheets("Hoja5")
  sh.Cells.ClearContents
  With Sheets("Hoja4")
    .Rows(1).Copy sh.Range("A1")
    a = .Range("A2:H" & .Range("A" & Rows.Count).End(3).Row).Value2
    m = WorksheetFunction.Sum(.Range("H2", .Range("H" & Rows.Count).End(3)))
  End With
  ReDim b(1 To UBound(a, 1) + m, 1 To 8)
  '
  For i = 1 To UBound(a, 1)
    For j = 1 To a(i, 8)
      k = k + 1
      For n = 1 To 8
        b(k, n) = a(i, n)
      Next n
    Next j
  Next i
  '
  sh.Range("A2").Resize(UBound(b), 8).Value = b
End Sub

Disculpa, te envié la base pequeña. Quiero replicar esa macro en esta base. Cabe resaltar que la base es desde A1-Y3556. Podrías, por favor, ayudarme. Gracias. 

No se ve bien la imagen y si la hago grande no se ven los datos. Para que la imagen se vea mejor, solamente selecciona 4 registros. Oculta las columnas que no sean relevantes. Yo entiendo que quieres pasar todas las columnas, pero solamente necesito ver una muestra de tus datos.

Importante: ¿En cuál columna tienes el "#"?

La columna que de #Distritos es la P. Para que puedas tener una mejor visualización te comparto el link del drive. https://drive.google.com/file/d/1kTnM14cBOEyyBhO8MWHatSZgDh2dwmFq/view?usp=sharing

No pude abrir tu archivo.

Pero solamente necesitaba saber la columna con el #.

Prueba la siguiente macro, debes poner tus datos en la hoja4, los resultados quedarán en la hoja5.

Sub insertar_filas()
  Dim a As Variant, b As Variant, sh As Worksheet
  Dim i As Long, j As Long, k As Long, m As Long, n As Long
  '
  Set sh = Sheets("Hoja5")
  sh.Cells.ClearContents
  With Sheets("Hoja4")
    .Rows(1).Copy sh.Range("A1")
    a = .Range("A2:Y" & .Range("A" & Rows.Count).End(3).Row).Value2
    m = WorksheetFunction.Sum(.Range("P2", .Range("P" & Rows.Count).End(3)))
  End With
  ReDim b(1 To UBound(a, 1) + m, 1 To 25)
  '
  For i = 1 To UBound(a, 1)
    For j = 1 To a(i, 16)
      k = k + 1
      For n = 1 To 25
        b(k, n) = a(i, n)
      Next n
    Next j
  Next i
  '
  sh.Range("A2").Resize(UBound(b), 25).Value = b
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas