Macro generar meses de acuerdo a número

Para Dante Amor

Se tiene en la hoja1: Ver valores de las columnas a y c. La macro debe generar en la hoja llamada "Generado" para cada año los meses que indique el valor de la columna C, Ejemplo para el año 2000 el valor es 4, es decir, de Enero a Abril. Para cada mes del año debe colocar el último día del mes correspondiente y los valores Generar Meses y %: Ver Hoja "Generado"

Hoja1:

hoja  "Generado":

2 respuestas

Respuesta
2

Te anexo la macro

Sub Crear_Meses()
'
'Por. Dante Amor
    '
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Generado")
    h2.Rows("2:" & Rows.Count).Clear
    j = 2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        año = h1.Cells(i, "A")
        For n = 1 To h1.Cells(i, "C")
            h2.Cells(j, "A") = año
            h2.Cells(j, "B") = DateSerial(año, n, Day(DateSerial(año, n + 1, 1) - 1))
            h2.Cells(j, "C") = h1.Cells(i, "C")
            h2.Cells(j, "D") = h1.Cells(i, "D")
            j = j + 1
        Next
    Next
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Respuesta
1

Prueba con esta macro

Option Base 1
Sub generar_meses()
Set hg = Worksheets("generado")
Set datos = Range("a1").CurrentRegion
With datos
    suma = WorksheetFunction.Sum(.Cells(2, 3).Resize(.Rows.Count - 1, 1))
    ReDim matriz(suma, 4)
    Set destino = hg.Range("a2").Resize(suma, .Columns.Count)
    x = 1
    For i = 2 To suma
        yea = .Cells(i, 1):  veces = .Cells(i, 3)
            For j = 1 To veces
                fecha = CDate("01/" & j & "/" & yea)
                dia = Day(WorksheetFunction.EoMonth(fecha, 0))
                matriz(x, 1) = yea
                matriz(x, 2) = CDate(dia & "/" & j & "/" & yea)
                matriz(x, 3) = .Cells(i, 3)
                matriz(x, 4) = .Cells(i, 4)
                x = x + 1
            Next j
    Next i
End With
hg.Range(destino.Address) = matriz
destino.Rows(0).Value = datos.Rows(1).Value
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas