|
こんにちは。かみちゃん です。
>やってみましたが、うまくいきません。
すでにponponさんから、レスがついていますが、標準モジュールのコードを使わず、
以下のコードをシートモジュールに置いて処理してみてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim themonth As Integer
Dim theyear As Integer
Dim days As Integer
With Target
If IsEmpty(.Value) Then Exit Sub
If Not IsNumeric(.Value) Then Exit Sub
If .Count > 1 Then Exit Sub
End With
'入力セルがA1とB1の場合のみ処理する
If Target.Address = Range("A1").Address Or _
Target.Address = Range("B1").Address Then
'A1とB1に数値が入力してあれば、処理する。
If Range("A1").Value <> "" And Range("B1").Value <> "" And _
IsNumeric(Range("A1").Value) And IsNumeric(Range("B1").Value) Then
'前回の値をクリアする。
Range("A4:A35").ClearContents
'年のセル
theyear = Range("A1").Value
'月のセル
themonth = Range("B1").Value
'月の値が1〜12かをチェック(小数点だったときも反応してしまうが・・・)
If themonth >= 1 And themonth <= 12 Then
With Range("A4")
'1ヶ月分の日付を生成する。
For days = 1 To Day(DateSerial(theyear, themonth + 1, 1) - 1)
.Offset(days - 1).Value = DateSerial(theyear, themonth, days)
Next
End With
Else
MsgBox "月の値は、1〜12を入力してください。"
Range("B1").Select
End If
End If
'以下、別にいらない機能
If Target.Address = Range("A1").Address Then
Range("B1").Select
End If
If Target.Address = Range("B1").Address Then
Range("A1").Select
End If
'ここまで
End If
End Sub
|
|