和暦(令和)未対応のEXCELで和暦(令和)で記載されたデータを西暦に変換する関数です。
VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法
登録されたら、シート上からユーザー関数「SDate」が使用できます。
使い方は
ワークシート上で =SDate(日付【和暦】)の関数として使用できます。
和暦がシリアル値に変換されますので、セルの書式を西暦に変更して使用してください。
【例】
SDate(“R02/03/01”) → 2020年3月1日
SDate(“令3/11/1”) → 2021年3月1日
SDate(“令和1年5月1日”) → 2019年5月1日
Function SDate(GDate As String) As Date
’文字列の日付を令和に対応したシリアル値(計算可能な日付)に変更する関数
Dim i1 As Long
Dim i2 As Long
Dim EraY As Long
Dim EraY1 As String
Dim EraY2 As String
Dim YMD As String
Dim a As Long
Dim Era(1 To 5, 1 To 5)
Era(1, 1) = #1/25/1868#: Era(1, 2) = #7/29/1912#: Era(1, 3) = “M”: Era(1, 4) = “明”: Era(1, 5) = “明治”
Era(2, 1) = #7/30/1912#: Era(2, 2) = #12/24/1926#: Era(2, 3) = “T”: Era(2, 4) = “大”: Era(2, 5) = “大正”
Era(3, 1) = #12/25/1926#: Era(3, 2) = #1/7/1989#: Era(3, 3) = “S”: Era(3, 4) = “昭”: Era(3, 5) = “昭和”
Era(4, 1) = #1/8/1989#: Era(4, 2) = #4/30/2019#: Era(4, 3) = “H”: Era(4, 4) = “平”: Era(4, 5) = “平成”
Era(5, 1) = #5/1/2019#: Era(5, 2) = #1/1/2099#: Era(5, 3) = “R”: Era(5, 4) = “令”: Era(5, 5) = “令和”
On Error GoTo EXITSDate
If IsDate(GDate) = True Then
SDate = DateValue(GDate)
If SDate <= 0 Then
GoTo EXITSDate
End If
Exit Function
End If
For i1 = 1 To 5
If Era(i1, 3) = Mid(GDate, 1, 1) Then
YMD = Mid(GDate, 2, 10)
GoTo ExitEra
End If
Next
For i1 = 1 To 5
If Era(i1, 5) = Mid(GDate, 1, 2) Then
YMD = Mid(GDate, 3, 10)
GoTo ExitEra
End If
Next
For i1 = 1 To 5
If Era(i1, 4) = Mid(GDate, 1, 1) Then
YMD = Mid(GDate, 2, 10)
GoTo ExitEra
End If
Next
ExitEra:
For i2 = 0 To 9
If i2 = Mid(YMD, 1, 1) Then
EraY1 = i2
Exit For
End If
Next
For i2 = 0 To 9
If i2 = Mid(YMD, 2, 1) Then
EraY2 = i2
Exit For
End If
Next
EraY = EraY1 & EraY2
MD = Mid(YMD, Len(Format(EraY, “#0”)) + 1, 100)
If IsDate(Year(Era(i1, 1)) -1 + EraY & MD) = True Then
SDate = Year(Era(i1, 1)) -1 + EraY & MD
Else
GoTo EXITSDate
End If
If SDate <= 0 Then
GoTo EXITSDate
End If
Exit Function
EXITSDate:
SDate = CVErr(xlErrValue)
End Function
ここで紹介したコード使用による損害に対しては一切責任は負えません。