|
実状に合うか、解りませんが?
要は、シリアル値としてセルに代入せず文字列にすると言う事ですか?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Const strForm As String = "gee.mm.dd"
Dim 各々のセル As Range
Dim lngYear As Long
Dim lngMonth As Long
Dim lngDay As Long
If Intersect(Target, Range("C28:C500")) Is Nothing Then
Exit Sub
End If
Application.EnableEvents = False
For Each 各々のセル In Intersect(Target, Range("C28:C500"))
If 各々のセル.Value2 <> "" Then
If IsDate(各々のセル.Value) Then
lngYear = Year(各々のセル.Value)
lngMonth = Month(各々のセル.Value)
lngDay = Day(各々のセル.Value) + 1
Else
If IsNumeric(各々のセル.Value2) Then
If 各々のセル.Value2 <= 31 Then
lngYear = Year(Date)
lngMonth = Month(Date)
lngDay = Day(各々のセル.Value2) + 1
End If
End If
End If
If Day(Date) >= 25 Then
lngMonth = lngMonth + 1
End If
各々のセル.Value = Format(DateSerial(lngYear, lngMonth, lngDay), strForm)
End If
Next
Application.EnableEvents = True
End Sub
|
|