|    | 
     複数セルに一気に入力するケースを考慮してみました。 
 
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でも)の 
型が変わってきてしまうのです。 
(複数セルを一気に操作すると配列として扱う必要があります。) 
 
 | 
     
    
   |