| 
    
     |  | 月のデータの範囲はルールがありそうなので、 そのルールでOffsetした範囲と考えていいのであれば、
 シートのChangeイベントを利用して、
 
 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim r As Range
 Dim v As Variant
 If Target.Count <> 1 Then Exit Sub
 If Target.Address <> "$P$1" Then Exit Sub
 v = Choose(Target.Value, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2)
 If Not IsNull(v) Then
 With Me.Range("Q5:V19")
 Set r = .Offset(, .Columns.Count * v)
 End With
 Application.EnableEvents = False
 Me.Range("J5:O19").Value = r.Value
 Application.EnableEvents = True
 '    MsgBox v & vbCrLf & r.Address
 Else
 MsgBox "入力値が誤ってます。"
 End If
 End Sub
 
 でどうでしょう。
 目的のシートのシートモジュールに記述します。
 
 
 |  |