« ユーザーフォームのテキストボックス内で改行文字列を取り出す(その2) | トップページ | 「特許翻訳まなびの会」の河崎さんにお会いしました。 »

2009年10月11日 (日)

ワードの下付き文字の書式情報をテキスト情報に変換するマクロ

今回は、先日のあの手・この手の特許翻訳の秀丸マクロセミナー
での話題に関するものです。

秀丸にて英訳をする場合に、原文のワード文書の書式が
崩れてしまうことがあります。

たとえば、ワード文書では、下付き文字、上付き文字、
太文字などありますが、秀丸に文章をコピーすると
これらの文字の書式がなくなってしまいます。

よって、ワードの文字書式をテキスト情報で維持する
ためのマクロがあると便利だねという話がありました。

▼プログラム内容
今日紹介するのは、下付き文字の書式を<sub>と</sub>のタグで
囲むことで、書式情報をテキスト情報に置換するマクロです。

また、秀丸で翻訳したのちに、ワード文書で再度
下付き文字に変換するマクロもあわせて紹介します。

二つセットでお使いください。

太文字や上付き文字も同様のマクロで実行可能です。

なお、このプログラムの考え方は、特許翻訳者の
水野麻子さんの私塾でワードマクロの授業で習いました。

htmlで使われるタグの記号をうまく使えば、うまく処理できます。

▼プログラム1(下付き文字書式をテキスト情報へ変換)
Sub 下付き文字のテキスト変換()
         
      Dim myRange As Range

10    Application.ScreenUpdating = False

20    Set myRange = ActiveDocument.Range(0, 0)

30    With myRange.Find
40       .Wrap = wdFindStop
50       .Font.Subscript = True
60       .Execute findText:=""
70    End With

80    Do While myRange.Find.Found = True
90        myRange.Font.Subscript = False
100       Selection.SetRange Start:=myRange.End, End:=myRange.End
110       Selection.TypeText Text:="</sub>"
120       Selection.SetRange Start:=myRange.Start, End:=myRange.Start
130       Selection.TypeText Text:="<sub>"
140       myRange.Collapse
150       myRange.Find.Execute
160   Loop

170   Selection.HomeKey unit:=wdStory
180   Application.ScreenUpdating = True

End Sub

▼プログラム2(テキスト情報から、下付き文字書式へ変換)
Sub テキストの下付き文字変換()
         
      Dim myRange As Range

10    Application.ScreenUpdating = False

20    Set myRange = ActiveDocument.Range(0, 0)

30    With myRange.Find
40       .Wrap = wdFindStop
50       .MatchWildcards = True
60       .Execute findText:="[<]sub[>]*[</]sub[>]"
70    End With

80    Do While myRange.Find.Found = True
90        myRange.Font.Subscript = True
100       Selection.SetRange Start:=myRange.End, End:=myRange.End - 6
110       Selection.Delete
120       Selection.SetRange Start:=myRange.Start, End:=myRange.Start + 5
130       Selection.Delete
140       myRange.Collapse
150       myRange.Find.Execute
160   Loop

170   Selection.HomeKey unit:=wdStory
180   Application.ScreenUpdating = True

End Sub

▼プログラム1の解説

20行~70行
下付の任意の文字列を探す命令です。
rangeオブジェクトを使いましたが、selectionオブジェクトでも
同じです。

検索対象のテキストを空欄にして、検索したい書式(今回は下付)
だけを指定すると、指定した書式をもつ任意の文字列を検索
できます。

これは、通常の「検索と置換」ダイアログボックスでの
考え方と同じですね。

80行~160行
下付文字列が見つかった場合に、<sub>と</sub>を前後に
書くための命令です。

▼プログラム2の解説

20行~70行
<sub>と</sub>とで囲まれた文字列を検索する命令です。

検索対象文字列が以下のようになっていることに注目。
findText:="[<]sub[>]*[</]sub[>]"

findText:="<sub>*</sub>"

ではありません。

今回の検索では、「*」を用いて、0以上の任意の文字列を
検索をするために、ワイルドカード検索をしています。

ワイルドカード検索の場合には、ワイルドカード検索で用いる
特殊記号(たとえば、*, ^, [, ], <, >など)を検索の
文字列に利用することができません。

なので、例えば、「<」を検索文字列であることを示すため、
[<]として、前後をスクウェアブラケットで囲んでいるわけです。

ちなみに、[を検索する場合には、[[]というように書きます。

▼工夫
カーソル移動に以下の構文を使いました。

Selection.SetRange Start:=カーソル開始位置, End:=カーソル終了位置

上記のプログラムでは、下付き文字を
ひとつひとつ検索して書き換えをしています。

もう少し工夫すると、同様の文字列を一括置換したり
できるので、処理が早くなるかもしれません。

|

« ユーザーフォームのテキストボックス内で改行文字列を取り出す(その2) | トップページ | 「特許翻訳まなびの会」の河崎さんにお会いしました。 »

マクロプログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/46447074

この記事へのトラックバック一覧です: ワードの下付き文字の書式情報をテキスト情報に変換するマクロ:

« ユーザーフォームのテキストボックス内で改行文字列を取り出す(その2) | トップページ | 「特許翻訳まなびの会」の河崎さんにお会いしました。 »