| 
    
     |  | くりす さんへ >>A1に日付を入れるとA2の縦にはその月の日にちが、横のB2には次の月の日にちがと言うように6ヶ月表示するにはどうすればいいでしょうか?
 >
 >例えばどのような感じですか?
 >A1のセルに4/10 と入力するとA2から1〜30の数値が表示するのですか?(B列は5月分)
 
 
 上記と考えて、該当のシートモジュールにて
 動作:セルA1に日付を入力し「Enter」等でセルを移動すると動作します。
 
 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim St_Ma As Date, En_Ma As Date, i As Long, En_Da As Long
 
 With Target
 'セル(選択)の個数を1個に制限
 If .Cells.Count <> 1 Then Exit Sub
 
 'セルのアドレスをA1に制限
 If .Address(0, 0) <> "A1" Then Exit Sub
 
 'セルの値が空白なら処理をしない
 If IsEmpty(.Value) Then Exit Sub
 
 'セルの値が日付でなければ処理をしない
 If Not IsDate(.Value) Then Exit Sub
 
 '開始月を取得
 St_Ma = DateSerial(Year(.Value), Month(.Value), 1)
 
 '終了月を取得
 En_Ma = DateAdd("m", 5, St_Ma)
 
 End With
 
 'イベントを制御
 Application.EnableEvents = False
 
 'データをクリア
 Range("A2:F32").ClearContents
 
 'ループにて6ヶ月分廻す
 For i = 0 To DateDiff("m", St_Ma, En_Ma)
 
 'その月が何日有るをを取得
 En_Da = DateAdd("m", i + 1, St_Ma) - DateAdd("m", i, St_Ma)
 
 '該当列の2行目に「1」を3行目に「2」を入力
 Cells(2, i + 1).Resize(2).Value = Application.Transpose(Array(1, 2))
 
 'AutoFillにてその月の日付を作成
 Cells(2, i + 1).Resize(2).AutoFill _
 Destination:=Cells(2, i + 1).Resize(En_Da), Type:=xlFillDefault
 
 Next i
 
 'イベント解除
 Application.EnableEvents = True
 End Sub
 
 |  |