【Word】【VBA】【マクロ】文字列の置換 その1(ワイルドカードで文字を追加)
ふと日本の法令を覗いてみると、こちらも独特な書き方がされてますね。
専門家であれば、専用のソフトで見やすくできるのかと思いますが、
如何せん、素人ですので、Word にコピペして、体裁を変えられるようにしたいと思ってます。
題材にしたのは「河川法」ですが、今回はあまり内容にはこだわらずに、変更経緯をメモしていこうと思います。
「河川法」『第百条』付近を例にして、『漢数字』の置換準備
まず気になるのが、『漢数字』で書かれた条番号です。
これを『算用数字』に変更して見やすくしたいのですが、その置換作業の前に、赤囲いの様な気になる部分がたくさん、、、
- 条番号が「第百条」「第百条の二」「第百条の三」「第百一条」と言うように、「条の*」(*は漢数字で番号は二からスタート)が付く場合がある。
- 条の項番号(段落番号)では、「第一項」(一段落目)の頭には何もつかず、「第二項」(ニ段落目)から『算用数字』の「2」からナンバリングされている。
- 条の項の第一下位レベルでは、『漢数字』の「一」からナンバリングされている。
- 条の項の第一下位レベルのもう一段下位レベル(第二下位レベル)には、「イ・ロ・ハ・ニ・・・」のナンバリング
などなど、、、なので、まずは「条」以下の連番があったりなかったりを統一させる為、次の順番で、置換を進める事にしました。
項以下が、「算用数字」「漢数字」「イロハ」でレベル分けされているのは救いでしたね、、、と言うわけで順番は、
1.第一下位レベル『漢数字』の頭に「#」を付けて、以後置換する段落番号と区別できるようにする。(ここでは本文中の漢数字は触らず、見出し番号のみ変更)
「(改行後の)五 」→「(改行)#五 」
2.本文中の「第**条の・・」となっている、「の」と「・・」の間に「の0」を追加し、同時に漢数字を算用数字に変更(見出し部はまだ触らず)
「第十六条の二」→「第十六条の02」
3.本文中の「第**条」の後ろに「の01」を追加(見出し部はまだ触らず)
「第十五条」→「第十五条の01」
4.見出しの条番号に「の0*;」を追加(「;」は後に判別しやすくする為)
「第百二条」→「第百二条の01;」
「第百条の五」→「第百条の0五;」
と言うわけで、VBA の コードはこんな感じです。
1.第一下位レベル『漢数字』の頭に「#」
「(改行後の)五 」→「(改行)#五 」
---------- ---------- ---------- ---------- ---------- ---------- ----------
ActiveDocument.Range(0, 0).Select 'カーソルを先頭に移動
'『十』
With Selection.Find
.text = "^p" + "十 " '^pは改行(ワイルドカードOFF時)
.Replacement.text = "^p" + "#十 "
.Forward = True
.Wrap = wdFindContinue '全文検索
.Format = True
.MatchWildcards = False 'ワイルドカードOff
.Execute Replace:=wdReplaceAll '一つ目を検索して置換&全て置換
End With
' 「(改行後の)十五 」→「(改行)#十五 」
With Selection.Find
.text = "^13" + "十" + "(?)" + " " ' ^13 はワイルドカードオン時
' の改行文字
' 一文字検索の?は、置換後に使う為に
' カッコ付きにしておく(さらに””)
.Replacement.text = "^13" + "#十" + "\1" + " "
'ワイルドカードOn時に ? で見つけたものの一つ目として
' 「¥」+ 「(一つ目の)1」
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchWildcards = True 'ワイルドカードOn
.Execute Replace:=wdReplaceAll
End With
---------- ---------- ---------- ---------- ---------- ---------- ----------