【Word】【VBA】【マクロ】文字列の置換 その3
Word の マクロはホント難しい、、、
Excel は表なので、規則がある程度ハッキリしますが、
法令文章という、ある程度規則だっている文章ですら、
色んなパターンがありすぎて、マクロ組むにも一苦労です
なので、まずは日本の法令文章を整理するのに
よく使う文字列の検索と置換の基本形を、
- Sub 定義と条番号を入れ替え()
- 10:
- Dim gettime As Single '時間変数を定義
- 20:
- ActiveDocument.Range(0, 0).Select 'カーソルを文書の先頭に移動
- ActiveDocument.Bookmarks("\EndOfDoc").Select 'カーソルを文書の末尾に移動
- ActiveDocument.Bookmarks("\StartOfDoc").Select 'カーソルを文書の先頭に移動
- 30:
- Selection.Find.ClearFormatting '検索文字列の書式の削除???
- Selection.Find.Replacement.ClearFormatting '置換文字列の書式の削除???
- 40:
- gettime = Timer '選択表示時間の調整
- Do While Timer < gettime + 0.2 'こちらは短くてもだいたい大丈夫
- Loop
- 50:
- With Selection.Find
- .text = "(【*の定義】:)^13(第*条;)" '条説明と条番号
- .Replacement.text = "\2" + "^p" + "\1" '上記を入れ替える
- .ParagraphFormat.Reset '段落書式のクリア
- '(スタイルもクリアされる、、、)
- .Forward = False '検索方向上向き
- .Wrap = wdFindAsk '文書の先頭/末尾まで検索したら聞く
- .Format = False '書式にこだわらずに検索する
- .MatchCase = False '大文字小文字区別せずに検索する
- .MatchWholeWord = False '(英)完全一致でなくとも検索する
- .MatchByte = False '全角半角区別せずに検索する
- .MatchAllWordForms = False '(英)異なる活用形は検索しない
- .MatchSoundsLike = False '(英)あいまいに検索しない
- .MatchFuzzy = False '(日)あいまいに検索しない
- .MatchWildcards = True 'ワイルドカードOn
- .Execute Replace:=wdReplaceAll '検索実行 全て置換する
- End With
- 60:
- gettime = Timer '選択表示時間の調整
- Do While Timer < gettime + 1 'ちょっと長めにしてます
- Loop
- End Sub
以上が、最近のフルバージョンで、
あとは、文章によって、適当にいじってます
20: カーソル位置 初期化
検索する文字列によって、後ろから検索しないと確実にヒットしないパターンがあり、ヒット時に検索を止めたい事もあるので、デフォルトブックマークの \EndOfDoc で文書末にカーソルもっていく事が多いです、便利です
30: 検索書式と置換書式の削除
これが未だ解からない、、、デフォルトでセットされてたり、以前の検索・置換で設定したスタイル(見出し等)を削除したいのですが、これでは無い模様で、この文はとりあえず入れてますが、効果無い感じです
40: & 60: 表示時間の調整
F8キーで一段ずつ実行するとうまくいくのに、まとめて実行すると検索漏れがでるので、これを入れてます。ここに DoEvents を追加する方法も見られるのですが、逆に Word 側 の表示が見えず確認しにくいので、あまり入れていません。
50: 検索と置換
とりあえず、今日はここまでホント奥が深いですね、、、上記が基本形ですが、.Execute を外に出して、Do while と組み合わせたり、.Found = False/True と組み合わせたり、色々です一回の置換後、カーソルは置換した文字列を選択していますが、次回の検索は、選択された文字列の先頭から始まっている模様