|
複数セルに一気に入力するケースを考慮してみました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 各々のセル As Range
If Intersect(Target, Range("B20:B350")) Is Nothing Then
Exit Sub
End If
Application.EnableEvents = False
'For Each を使ってIntersect(Target, Range("B20:B350"))の範囲内にあるセルを
'1つ1つ処理する。
For Each 各々のセル In Intersect(Target, Range("B20:B350"))
If IsNumeric(各々のセル.Value2) And 各々のセル.Value2 <> "" Then
If Day(Date) >= 23 Then
各々のセル.Value = DateSerial(Year(Date), Month(Date) + 1, Day(各々のセル.Value2) + 1)
Else
各々のセル.Value = DateSerial(Year(Date), Month(Date), Day(各々のセル.Value2) + 1)
End If
End If
Next
Application.EnableEvents = True
End Sub
以下はテスト用のマクロですが…
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox TypeName(Target.Value)
End Sub
1つのセルに何か入力したり、DELで消したりする場合と
複数セルに一気に何かした場合ではTaget.Value(Value2でも)の
型が変わってきてしまうのです。
(複数セルを一気に操作すると配列として扱う必要があります。)
|
|