De acuerdo a lo anterior, debes tener 3 hojas con estos nombres:
- "Hoja1" con los datos en las columnas A y B. Empiezan en la celda A1.
- "Formato" con el formato a copiar. Rango del formato A1:P34
- "Salida" con el resultado. El resultado empezará en la celda A1.
Revisa que tus hojas tengan esos nombres y los datos se encuentren en los rangos mencionados.
Hice una prueba con 40 años y funciona de manera inmediata.
Pon la siguiente macro en un módulo.
Sub Ordenar_Por_Fecha()
Dim sh3 As Worksheet, dic As Object, rng As Range
Dim a As Variant, b As Variant, ky As Variant
Dim i As Long, j As Long, k As Long, y As Long
'
Application.ScreenUpdating = False
Set sh3 = Sheets("Salida")
Set dic = CreateObject("Scripting.Dictionary")
'
Set rng = Sheets("Hoja1").Range("A2", Sheets("Hoja1").Range("A" & Rows.Count).End(3))
a = rng.Resize(, 2).Value2
y = 1
ReDim b(1 To 31 * ((Year(WorksheetFunction. Max(rng)) - Year(WorksheetFunction.Min(rng))) + 1), 1 To 12)
For i = 1 To UBound(a)
If Not dic.exists(Year(a(i, 1))) Then
dic(Year(a(i, 1))) = y
y = y + 31
End If
j = dic(Year(a(i, 1))) + Day(a(i, 1)) - 1
k = Month(a(i, 1))
b(j, k) = a(i, 2)
Next
'
sh3.Cells.Clear
Sheets("Formato").Range("A1:P34").Copy
sh3.Range("A1:A" & dic.Count * 34).PasteSpecial xlPasteAll
i = 2
j = 1
For Each ky In dic.keys
sh3.Range("A" & i).Value = ky
sh3.Range("C" & i).Resize(31, 12).Value = Application.Index( _
b, Evaluate("=row(" & j & ":" & j + 31 & ")"), Application.Transpose([row(1:12)]))
i = i + 34
j = j + 31
Next
sh3.Select
'
Application.ScreenUpdating = True
Application.CutCopyMode = False
MsgBox "Fin"
End Sub