| 
    
     |  | >7/3/20と入力した場合のみH19.03.20と表示させたいのですが >最初のコードの機能を残したいのですが・・・
 
 元のコードでも、「7/3/20」→「H19.03.20」とは成らないのでは?
 元のコードでは、「7/3/20」→「2007/3/20」と成ると思うのですが(Excel97以外では)
 
 >下記のコードで20と入力するとM33.01.20になってしまいます
 
 此れは、IsDateで確認を取っている為、セルの書式が日付に成って居る場合に起こります
 
 >それと7/3/20と入力した場合H19.03.21となり1プラスとなりますが
 >プラス1は不要です。
 
 此れは、要求仕様が説明されて無いので、日付が何を持ってプラスされるのかが解りませんで
 其のまま書いて有ります?
 
 そこら辺を少し直して見ました
 
 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"))
 With 各々のセル
 If .Value <> "" Then
 If IsNumeric(.Value) Or IsDate(.Value) Then
 If 1 <= .Value And .Value <= 31 Then
 lngYear = Year(Date)
 lngMonth = Month(Date)
 lngDay = .Value
 Else
 lngYear = Year(.Value)
 lngMonth = Month(.Value)
 lngDay = Day(.Value)
 End If
 If Day(Date) >= 25 Then
 lngMonth = lngMonth + 1
 End If
 .NumberFormatLocal = "G/標準"
 .Value = Format(DateSerial(lngYear, lngMonth, lngDay), strForm)
 End If
 End If
 End With
 Next
 
 Application.EnableEvents = True
 
 End Sub
 
 
 |  |