前回の記事にて、あの手・この手の特許翻訳の秀丸マクロセミナー について少し触れました。
このセミナーでの話題に関するものです。
よって、ワードの文字書式をテキスト情報で維持するためのマクロがあると便利だねという話がありました。
<目次>
作用
まず、下付き文字が入った文書を準備してください。
①下付き文字の書式を<sub>と</sub>のタグで囲むことで、書式情報をタグ(テキスト情報)に置換します。
登録方法
プログラム1(下付き文字書式をタグ(テキスト情報)へ変換)
Sub 下付き文字の書式をタグへ変換() Dim myRange As Range Set myRange = ActiveDocument.Range(0, 0) With myRange.Find .Wrap = wdFindStop .Font.Subscript = True .Execute findText:="" End With Do While myRange.Find.Found = True myRange.Font.Subscript = False With Selection.Range .SetRange Start:=myRange.End, End:=myRange.End .Text = "</sub>" .SetRange Start:=myRange.Start, End:=myRange.Start .Text = "<sub>" End With myRange.Collapse myRange.Find.Execute Loop Set myRange = Nothing End Sub
プログラム2(テキスト情報から、下付き文字書式へ変換)
Sub タグを下付き文字書式へ変換() Dim myRange As Range Set myRange = ActiveDocument.Range(0, 0) With myRange.Find .Wrap = wdFindStop .MatchWildcards = True .Execute findText:="[<]sub[>]*[<][/]sub[>]" End With Do While myRange.Find.Found = True myRange.Font.Subscript = True With Selection.Range .SetRange Start:=myRange.End, End:=myRange.End - Len("</sub>") .Delete .SetRange Start:=myRange.Start, End:=myRange.Start + Len("<sub>") .Delete End With myRange.Collapse myRange.Find.Execute Loop Set myRange = Nothing End Sub
プログラム1の解説
7行~11行
下付の任意の文字列を探す命令です。
rangeオブジェクトを使いましたが、selectionオブジェクトでも同じです。
検索対象のテキストを空欄(50行)にして、検索したい書式(今回は下付:40行)
だけを指定すると、指定した書式をもつ任意の文字列を検索できます。
これは、通常の「検索と置換」ダイアログボックスでの考え方と同じですね。
13行~23行
下付文字列が見つかった場合に、<sub>と</sub>を前後に書くための命令です。
プログラム2の解説
7行~11行
<sub>と</sub>とで囲まれた文字列を検索する命令です。
検索対象文字列が以下のようになっていることに注目。
findText:="[<]sub[>]*[<][/]sub[>]"
findText:="<sub>*</sub>"
ではありません。
また、
findText:="[<]sub[>]*[</]sub[>]"
これも厳密にいうと間違いです。(今回のプログラムでは動きますが。。。)
心がけとして、記号の < と / が連続していても、横着せずに一つずつ [ と ] で囲みましょう。
今回の検索では、「*」を用いて、0以上の任意の文字列を検索をするために、ワイルドカード検索をしています。
工夫
選択範囲の指定のために、以下の構文を使いました。
Selection.Range.SetRange Start:=カーソル開始位置, End:=カーソル終了位置