以前紹介した「【コード】和暦を西暦にするWordマクロ(変更履歴オン版)」を新元号の「令和」にも対応するように作りかえました。
いずれFormat関数が令和にも対応すると思うのですが、令和元年5月1日現在では対応していないようなので、マクロにしてみました。
<目次>
このマクロでできること
令和の日付を西暦で英語表記に変換します。処理した箇所は黄色の蛍光ペンで着色します。
(処理前)
(処理後)
マクロの解説
実はFormat関数を使っています。Format関数というのは、元号が変わってもカウントをし続けているようです。
たとえば、以下のように西暦が表示されるのです。
平成元年1月1日は存在していないのですが、Format関数を使って変換すると日付が表示されます。エラーになりません。
(処理前)
(Forma関数で変換後)
同じく、昭和94年なんて存在していませんが入力してみると。。。そうです。昭和94年は今年なのです。
(処理前)
(昭和94年はForma関数の変換結果、令和元年はマクロを使った変換結果)
この性質を使って、令和を平成の年に換算してFormat関数で西暦に変換しているということなのです(65行目~74行目)。
(後に追記) Format関数が令和に対応した後も使えるように66行目、72~74行目を追記しました。
マクロ
Sub 和暦を西暦に変換4() Dim blnShowRevisions As Boolean Dim myDoc As Document Dim myRange As Range Dim Pos_Start As Integer Dim myText As String Dim myYear As Integer Set myDoc = ActiveDocument With myDoc '変更履歴の表示状態の設定 blnShowRevisions = .ShowRevisions '設定保存 .ShowRevisions = False '表示オフ End With '------------------------------------------- '平成までの処理 '------------------------------------------- Set myRange = myDoc.Range(0, 0) With myRange.Find .Text = "[明大昭平][治正和成][0-90-9元]{1,2}年[0-90-9]{1,2}月[0-90-9]{1,2}日" .Forward = True .Format = False .Wrap = wdFindStop .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True Do While .Execute = True With myRange .HighlightColorIndex = wdYellow .Text = Format(.Text, "mmmm d, yyyy") .Collapse direction:=wdCollapseEnd DoEvents End With Loop End With '------------------------------------------- '令和の処理 '------------------------------------------- Set myRange = myDoc.Range(0, 0) With myRange.Find .Text = "令和[0-90-9元]{1,2}年[0-90-9]{1,2}月[0-90-9]{1,2}日" .Forward = True .Format = False .Wrap = wdFindStop .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True Do While .Execute = True With myRange .HighlightColorIndex = wdYellow myText = .Text If Format(myText, "mmmm d, yyyy") = myText Then '追記(Format関数が令和に未対応) myText = Replace(myText, "元年", "1年") myText = Replace(myText, "令和", "") Pos_Start = InStr(1, myText, "年") myYear = CInt(Left(myText, Pos_Start - 1)) + 30 .Text = Format("平成" & myYear & Mid(myText, Pos_Start), "mmmm d, yyyy") Else '追記(Format関数が令和に対応済み) .Text = Format(myText, "mmmm d, yyyy") '追記 End If '追記 .Collapse direction:=wdCollapseEnd DoEvents End With Loop End With '変更履歴の表示を元に戻す myDoc.ShowRevisions = blnShowRevisions '------------------------------------------- '後処理 '------------------------------------------- Set myRange = Nothing Set myDoc = Nothing End Sub