F002 和暦西暦変換関数(令和対応)

2019-05-05
EXCEL自作関数

 和暦(令和)未対応の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

ここで紹介したコード使用による損害に対しては一切責任は負えません。