Excel VBA 元号の年、前年、前前年を数字2桁の文字列で返す関数

#ところで、令和2年度の前年度は何年度（特に2019年）？
便宜上、プロシージャ名が*GStringとなっているものは、令和元年度にしています。
そうでないものは日付によって31か01が返ります。
#前前年がPrePre,前年がPre、今年はPreなし


ElseIf Year(preDT) = 2019 Then
rtnPreJEra2DegitString = CStr(Replace(Replace(Format(preDT, "ee"), "01", "01", 1, -1, vbTextCompare), "31", "31", 1, 1, vbTextCompare))

```vb
Function rtnPrePreJera2DegitGString(dt As Date) As String
' 前前年の元号の年部分を２桁で返す。返り値String　平成以前はそのまま。令和元年は元年に置換　平成31年は元年に置換
Dim prepreDT As Date
prepreDT = DateSerial(Year(dt) - 2, Month(dt), Day(dt))
If Year(prepreDT) <= 1988 Then
rtnPrePreJera2DegitGString = CStr(Format(prepreDT, "ee"))
ElseIf Year(prepreDT) = 2019 Then
rtnPrePreJera2DegitGString = CStr(Replace(Replace(Format(prepreDT, "ee"), "01", "元", 1, -1, vbTextCompare), "31", "元", 1, -1, vbTextCompare))
Else
rtnPrePreJera2DegitGString = CStr(Format(prepreDT, "ee"))
End If
End Function
Function rtnPrePreJera2DegitString(dt As Date) As String
' 前前年の元号の年部分を２桁で返す。返り値String　平成以前はそのまま。令和元年は01年のまま 平成31年はそのまま
Dim prepreDT As Date
prepreDT = DateSerial(Year(dt) - 2, Month(dt), Day(dt))
If Year(prepreDT) <= 1988 Then
rtnPrePreJera2DegitString = CStr(Format(prepreDT, "ee"))
ElseIf Year(prepreDT) = 2019 Then
rtnPrePreJera2DegitString = CStr(Replace(Replace(Format(prepreDT, "ee"), "01", "01", 1, -1, vbTextCompare), "31", "31", 1, 1, vbTextCompare))
Else
rtnPrePreJera2DegitString = CStr(Format(prepreDT, "ee"))
End If
End Function

Function rtnPreJEra2DegitString(dt As Date) As String
' 前年の元号の年部分を２桁で返す。返り値String 平成以前はそのまま。令和元年は01年のまま 平成31年はそのまま
Dim preDT As Date
preDT = DateSerial(Year(dt) - 1, Month(dt), Day(dt))
If Year(preDT) <= 1988 Then
rtnPreJEra2DegitString = CStr(Format(preDT, "ee"))
ElseIf Year(preDT) = 2019 Then
rtnPreJEra2DegitString = CStr(Replace(Replace(Format(preDT, "ee"), "01", "01", 1, -1, vbTextCompare), "31", "31", 1, 1, vbTextCompare))
Else
rtnPreJEra2DegitString = CStr(Format(preDT, "ee"))
End If
End Function
Function rtnPreJEra2DegitGString(dt As Date) As String
' 前年の元号の年部分を２桁で返す。返り値String 平成以前はそのまま。返り値String　平成以前はそのまま。令和元年は元年に置換　平成31年は元年に置換
Dim preDT As Date
preDT = DateSerial(Year(dt) - 1, Month(dt), Day(dt))
If Year(preDT) <= 1988 Then
rtnPreJEra2DegitGString = CStr(Format(preDT, "ee"))
ElseIf Year(preDT) = 2019 Then
rtnPreJEra2DegitGString = CStr(Replace(Replace(Format(preDT, "ee"), "01", "元", 1, -1, vbTextCompare), "31", "元", 1, -1, vbTextCompare))
Else
rtnPreJEra2DegitGString = CStr(Format(preDT, "ee"))
End If
End Function

Function rtnJEra2DegitGString(dt As Date) As String
' 今年の日本元号による年を元年以外は２桁の数字で返す。返り値String　平成以前はそのまま。令和元年は元年に置換　平成31年は元年に置換
If Year(dt) <= 1988 Then
rtnJEra2DegitGString = CStr(Format(dt, "ee"))
ElseIf Year(dt) = 2019 Then
rtnJEra2DegitGString = CStr(Replace(Replace(Format(dt, "ee"), "01", "元", 1, -1, vbTextCompare), "31", "元", 1, -1, vbTextCompare))
Else
rtnJEra2DegitGString = CStr(Format(dt, "ee"))
End Function
Function rtnJEra2DegitString(dt As Date) As String
' 今年の日本元号による年を元年以外は２桁の数字で返す。返り値String　平成以前はそのまま。令和元年は01年のまま 平成31年はそのまま
If Year(dt) <= 1988 Then
rtnJEra2DegitString = CStr(Format(dt, "ee"))
ElseIf Year(dt) = 2019 Then
rtnJEra2DegitString = CStr(Replace(Replace(Format(dt, "ee"), "01", "01", 1, -1, vbTextCompare), "31", "31", 1, -1, vbTextCompare))
Else
rtnJEra2DegitString = CStr(Format(dt, "ee"))
End If
End Function
Function AdjustJBYNendo(Dt As Date) As Date
'1月から3月まで、強制的に前年の4月1日に変えて「年度」の2桁の数字を得るときに使う。
Dim iYear As Long
Dim iMonth As Long
If Month(Dt) <= 3 Then
AdjustJBYNendo = DateSerial(Year(Dt) - 1, 4, 1)
Else
AdjustJBYNendo = Dt
End If
```

##欠点と対策
これだと前年度という年度には対応していないので
2019年2月にすると2018年度の元号を返すべきなのに返らないという問題があります。
そこで、必ず年度の元号2桁を出したい場合にはAdjustJBYNendoをかませます。
イミディエイトで確認すると
`?AdjustJBNendo("2020/1/1")`
2019/04/01が返ります。

しかしここで令和元年か平成31年かの問題が生じうることになります。