Have amended the code and added a few comments which I hope elucidate matters. Come back if not. If it's going to vary a lot, you could do something fancier, such as prompting the user to specify which columns to transpose etc.
Sub x()
Dim rng As Range, rng2 As Range
Application.ScreenUpdating = False
Sheet1.Activate
For Each rng In Range("A2", Range("A2").End(xlDown))
' the offset number below is the number of cols from PN to first date
Set rng2 = Range(rng.Offset(, 3), rng.End(xlToRight))
rng2.Copy
With Sheet2.Cells(Rows.Count, 1).End(xlUp)(2)
' repeat offset below
.Offset(, 3).PasteSpecial Transpose:=True
' second resize number below is no of cols before dates to be copied
.Resize(rng2.Columns.Count, 3) = rng.Resize(, 3).Value
End With
Next rng
Application.ScreenUpdating = True
End Sub
Bookmarks