【Word VBA】西暦を和暦にするWordマクロ(変更履歴オン版)

2015年2月3日

先日の受講した「正確さと一貫性を高めるためのとっておき7つのテクニック(翻訳ツールセミナー) 」で、講師の日英翻訳者の方が和暦を西暦にするマクロ を使われていることを紹介されていました。

私はこのマクロを使っていないので意識してませんでしたが、法務翻訳分野ではかなり活躍しそうな気がしました。セミナーでは、他の法務翻訳者の方々から反応がよかったです。

このセミナーで、上書き翻訳にこのような小さなマクロを組み合わせると便利だと思いました。

そこで、次の「ぱらぱら」には、この種の変換用マクロをワンクリックで実行できるようにボタンにして搭載します。今週末の東京での上書き翻訳セミナー の受講者の方々にまず使っていただき、その後、一般公開します。

さて、今回の記事では、西暦を和暦にするマクロを紹介します。

このマクロでできること

英語でスペルアウトされた西暦を和暦に変更します。

February 3, 2015 → 平成27年2月3日
Feb. 3, 2015 → 平成27年2月3日
Feb. 03, 2015 → 平成27年2月3日
FEBRUARY 3, 2015 → 平成27年2月3日
feb. 3, 2015 → feb. 3, 2015
FEB. 03, 2015 → 平成27年2月3日

記載の順序は、上記の通り、月 日 年 です。コンマも必要です。

マクロの解説

【コード】和暦を西暦にする(変更履歴オン版)」と同じように、変更履歴の記録機能がオンになっている場合にもマクロを実行できるようにしています。

西暦の検索には、ワイルドカードを用いて

[JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4}

としています。1文字目は月の名称の1文字を大文字で指定しています。

January, June, July
February
March, May
April, August
September
October
November
December

Format 関数を使って和暦に変換します。

Selection オブジェクトを使って検索や置換を行うと、マクロ実行前とカーソル位置が変更されるので、Rangeオブジェクトにて最初のカーソル位置を記録し、最後にカーソルをRangeオブジェクトの位置に戻すといいと思います。

マクロ


Sub 西暦を和暦にする()

 Dim blnShowRevisions As Boolean
 Dim myRange As Range
  
 With ActiveDocument
  '変更履歴の表示状態の設定
  blnShowRevisions = .ShowRevisions '設定保存
  .ShowRevisions = False '表示オフ
 End With

 '現在のカーソル位置の保存
 Set myRange = Selection.Range
 
 'カーソルを文書の先頭に移動
 ActiveDocument.Range(0, 0).Select
 
 With Selection.Find
  .Text = "[JFMASOND][a-zA-Z.]{1,} [0-9]{1,2}, [0-9]{4}"
  .Forward = True
  .Format = False
  .Wrap = wdFindStop
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = True
  Do While .Execute = True
   Selection.Range.HighlightColorIndex = wdYellow '蛍光ペン
   Selection.Text = Format(Selection.Text, "ggge年m月d日")
   Selection.Collapse direction:=wdCollapseEnd
   DoEvents
  Loop
  .Text = ""
  .MatchWildcards = False '設定を解除
 End With

 '変更履歴の表示を元に戻す
 ActiveDocument.ShowRevisions = blnShowRevisions
 
 '最初のカーソル位置に戻す
 myRange.Select
 
 Set myRange = Nothing

End Sub

関連記事

-コード
-, ,