Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6438 / 13646 ツリー ←次へ | 前へ→

【45236】初心者 くりす 06/12/16(土) 9:15 質問[未読]
【45237】Re:初心者 Statis 06/12/16(土) 10:42 発言[未読]
【45239】Re:初心者 Statis 06/12/16(土) 11:40 回答[未読]
【45240】Re:初心者 Kein 06/12/16(土) 13:45 回答[未読]

【45236】初心者
質問  くりす  - 06/12/16(土) 9:15 -

引用なし
パスワード
   A1に日付を入れるとA2の縦にはその月の日にちが、横のB2には次の月の日にちがと言うように6ヶ月表示するにはどうすればいいでしょうか?

【45237】Re:初心者
発言  Statis  - 06/12/16(土) 10:42 -

引用なし
パスワード
   ▼くりす さん:
>A1に日付を入れるとA2の縦にはその月の日にちが、横のB2には次の月の日にちがと言うように6ヶ月表示するにはどうすればいいでしょうか?

例えばどのような感じですか?
A1のセルに4/10 と入力するとA2から1〜30の数値が表示するのですか?(B列は5月分)

【45239】Re:初心者
回答  Statis  - 06/12/16(土) 11:40 -

引用なし
パスワード
   くりす さんへ
>>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

【45240】Re:初心者
回答  Kein  - 06/12/16(土) 13:45 -

引用なし
パスワード
   6ヶ月間のカレンダーを作る、ということですか ?
ならばこんな感じで、どうでしょーか ? シートモジュールに入れて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim GtDy As Date, SDy As Date, EDy As Date
  Dim i As Integer
 
  With Target
   If .Address <> "$A$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If Not IsDate(.Value) Then Exit Sub
   GtDy = .Value
  End With
  Application.EnableEvents = False
  Range("A2:F32").Clear
  SDy = DateSerial(Year(GtDy), Month(GtDy), 1)
  For i = 1 To 6
   EDy = DateAdd("m", 1, SDy) - 1
   With Cells(2, i)
     .Value = SDy
     .DataSeries xlColumns, xlChronological, _
     xlDay, 1, EDy
   End With
   SDy = EDy + 1
  Next i
  Range("A:F").EntireColumn.AutoFit
  Application.EnableEvents = True
End Sub

6438 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free