YuTaKoメモ

まずは欧州や日本の法律など、日々の覚書としていきます

目次
欧州の法令 日本の法令
(道路)
保安基準 VBA

【Word】【VBA】【マクロ】文字列の置換 その3


Word の マクロはホント難しい、、、

Excel は表なので、規則がある程度ハッキリしますが、

法令文章という、ある程度規則だっている文章ですら、
色んなパターンがありすぎて、マクロ組むにも一苦労です
なので、まずは日本の法令文章を整理するのに
よく使う文字列の検索と置換の基本形を、

    1. Sub 定義と条番号を入れ替え()
    2. 10:
    3.     Dim gettime As Single  '時間変数を定義
    4. 20:
    5.     ActiveDocument.Range(0, 0).Select              'カーソルを文書の先頭に移動
    6.     ActiveDocument.Bookmarks("\EndOfDoc").Select   'カーソルを文書の末尾に移動
    7.     ActiveDocument.Bookmarks("\StartOfDoc").Select 'カーソルを文書の先頭に移動
    8. 30:
    9.     Selection.Find.ClearFormatting                '検索文字列の書式の削除???
    10.     Selection.Find.Replacement.ClearFormatting    '置換文字列の書式の削除???
    11. 40:    
    12.     gettime = Timer                  '選択表示時間の調整
    13.     Do While Timer < gettime + 0.2   'こちらは短くてもだいたい大丈夫  
    14.     Loop  
    15. 50:
    16.     With Selection.Find                        
    17.         .text = "(【*の定義】:)^13(第*条;)"     '条説明と条番号
    18.         .Replacement.text = "\2" + "^p" + "\1"   '上記を入れ替える
    19.         .ParagraphFormat.Reset           '段落書式のクリア
    20.                                          '(スタイルもクリアされる、、、)
    21.         .Forward = False                 '検索方向上向き
    22.         .Wrap = wdFindAsk                '文書の先頭/末尾まで検索したら聞く
    23.         .Format = False              '書式にこだわらずに検索する
    24.         .MatchCase = False           '大文字小文字区別せずに検索する  
    25.         .MatchWholeWord = False      '(英)完全一致でなくとも検索する
    26.         .MatchByte = False           '全角半角区別せずに検索する  
    27.         .MatchAllWordForms = False   '(英)異なる活用形は検索しない
    28.         .MatchSoundsLike = False     '(英)あいまいに検索しない
    29.         .MatchFuzzy = False          '(日)あいまいに検索しない
    30.         .MatchWildcards = True           'ワイルドカードOn
    31.         .Execute Replace:=wdReplaceAll   '検索実行 全て置換する 
    32.     End With
    33. 60:
    34.     gettime = Timer                  '選択表示時間の調整
    35.     Do While Timer < gettime + 1     'ちょっと長めにしてます  
    36.     Loop

    37. End Sub
以上が、最近のフルバージョンで、
あとは、文章によって、適当にいじってます

20: カーソル位置 初期化
検索する文字列によって、
後ろから検索しないと確実にヒットしないパターンがあり、
ヒット時に検索を止めたい事もあるので、
デフォルトブックマーク\EndOfDoc
文書末にカーソルもっていく事が多いです、便利です

30: 検索書式と置換書式の削除
これが未だ解からない、、、
デフォルトでセットされてたり、以前の検索・置換で設定した
スタイル(見出し等)を削除したいのですが、これでは無い模様で、
この文はとりあえず入れてますが、効果無い感じです

40: & 60: 表示時間の調整
F8キーで一段ずつ実行するとうまくいくのに、
まとめて実行すると検索漏れがでるので、
これを入れてます。
ここに DoEvents を追加する方法も見られるのですが、
逆に Word 側 の表示が見えず確認しにくいので、あまり入れていません。

50: 検索と置換
ホント奥が深いですね、、、
上記が基本形ですが、
.Execute を外に出して、Do while と組み合わせたり、
.Found = False/True と組み合わせたり、色々です
一回の置換後、カーソルは置換した文字列を選択していますが、
次回の検索は、選択された文字列の先頭から始まっている模様

とりあえず、今日はここまで