【Word VBA】ルビを削除するWordマクロ

2016年10月25日

医薬翻訳で上書き翻訳をされている方から、ルビを削除したいという要望をいただきました。

お薬などの説明書には読み仮名が振られているがあるようです。

上書き翻訳をする場合、原文にルビが入っていると邪魔になりますので、前処理として削除する必要があるのです。

このマクロはまだ検証不足ではありますが、ある程度は正確にルビを削除できると思いますのでご利用ください。

このマクロでできること

メイン文書(本文)中のルビを一括削除します。

(実行前)

※Wordの設定でフィールド箇所を網かけ表示させています。(設定方法はこちらの記事「【Word】フィールドを常時表示させる」を参照ください)

ルビ

(実行後)

ルビが削除されました。フィールド自体が解除されていますので、網かけもなくなりました。

ルビ

マクロの解説

フィールドの記述については、以下のサイトを参考にさせていただきました。

山葵のアプリのサプリ (第7章■数式と計算フィールド)

このサイトによれば、ルビは数式フィールドにおいて

\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

-コード
-, , ,