医薬翻訳で上書き翻訳をされている方から、ルビを削除したいという要望をいただきました。
お薬などの説明書には読み仮名が振られているがあるようです。
上書き翻訳をする場合、原文にルビが入っていると邪魔になりますので、前処理として削除する必要があるのです。
このマクロはまだ検証不足ではありますが、ある程度は正確にルビを削除できると思いますのでご利用ください。
このマクロでできること
メイン文書(本文)中のルビを一括削除します。
(実行前)
※Wordの設定でフィールド箇所を網かけ表示させています。(設定方法はこちらの記事「【Word】フィールドを常時表示させる」を参照ください)
(実行後)
ルビが削除されました。フィールド自体が解除されていますので、網かけもなくなりました。
マクロの解説
フィールドの記述については、以下のサイトを参考にさせていただきました。
このサイトによれば、ルビは数式フィールドにおいて
\s\up
のスイッチが書かれていることが分かります。
そこで、文書においてフィールドを1つ1つ調べて、数式フィールドの場合に、スイッチの有無を確認します。Instr関数でゼロより大きな値があれば文字列があったと判定できます。
スイッチがある場合にはルビであることを意味していますから、このフィールドのルビを削除します。
具体的には、PhoneticGuideメソッドを使い、ルビに入れる文字列を空文字にして削除するのです。
フィールドオブジェクトからRangeオブジェクトを取得するためにField.Result プロパティを用いた場合には、なぜかPhoneticGuide メソッドが使えませんでした。
なので、残念なのですが(笑)、Selection.Rangeオブジェクトを使ってPhoneticGuideメソッドを使っています。
Selectメソッドを使っているために、カーソルが移動してしまうため Application.ScreenUpdating プロパティを使ったりRangeオブジェクトにカーソル位置を記憶させたりしています。
マクロ
Sub ルビを削除する() Dim myField As Field Dim myRange As Range '画面のちらつき防止 Application.ScreenUpdating = False 'カーソル位置の保存 Set myRange = Selection.Range For Each myField In ActiveDocument.Fields If myField.Type = wdFieldFormula Then If InStr(1, myField.Code.Text, "\s\up") > 0 Then myField.Select Selection.Range.PhoneticGuide "" End If End If Next 'カーソル位置を元に戻す myRange.Select 'Rangeオブジェクトの解放 Set myRange = Nothing Application.ScreenUpdating = True End Sub