別掲示板ですが、似たような質問がありましたので紹介します。
http://www.excel.studio-kazu.jp/kw/20201231083919.html
↑を見て頂ければわかるとおもいますが、Value2プロパティを参照することで表示形式によらず、入力された内容を調べることができます。
あとは、文字数をみて↓のように条件分岐をすればOKのようにおもいます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRNG As Range
If Not Intersect(Range("B:B"), Target) Is Nothing Then
Application.EnableEvents = False
For Each MyRNG In Intersect(Range("B:B"), Target)
Select Case Len(MyRNG.Value2)
Case 3 To 4
MyRNG.Value = DateSerial(Year(Date), Left(Format(MyRNG.Value2, "0000"), 2), Right(MyRNG.Value2, 2))
Case 5 To 6
MyRNG.Value = DateSerial("20" & Left(Format(MyRNG.Value2, "000000"), 2), Mid(Format(MyRNG.Value2, "000000"), 3, 2), Right(MyRNG.Value2, 2))
End Select
Next
Application.EnableEvents = True
End If
End Sub