• ベストアンサー

Word2016でふったルビだけを取り出したい。

Word上でふったルビだけを出力し、他のツールで再レイアウトしたいと思っています。テキスト形式でファイルを出力すると、全文字が出力されます。ルビだけを出力、あるいは、出力した全文字から、ルビだけを残す方法を、どなたか教えてくださらないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

(ルビ) ワードのルビは、フィールド・コードという仕組みで処理されている。 他のルートはないと思う。知らない人が多いのでは。 ワード95以前からある機能のようで、由来は古いが、最近ではあまりワードの本でも、解説もされてない。西欧圏以外の人にはあまり関係ない機能かな。 (VBAの必要性、難しさの認識) まして本件はWordVBAでの処理にならざるを得ないと思う。 すると市販解説本は1,2本で、ここまで解説されてない。WEBの記事も少数あるが、網羅的でなく、課題によっては見つけるのがむつかしい。 本件は、たまたまWEB記事で使えそうなものを見つけたので、改造して、漢字ールビの組み合わせを画面に出してみた。 (目的) 質問に、(本件できたとして、その後の)目的・使途が書かれていない。企業の秘密の秘匿のためだろうが、それによって、アウトプット周りが、決定的に左右される。さらに他のVBAの技量が要るかもしれない。 目的を書かない質問がここで多いが、おかしいと思う。 (位置) 目的実現に、出現位置が問題になるようなら、(エクセルのようにセル番地が決まっているものと違い)、文書上の位置は、表現しにくい。 (テスト・コード) ワードの、その文書の標準モジュールに下記をコピペして実行。 下記は、ルビの箇所数だけ、 MsgBox kanj & "-" & rubyの部分による、画面表示が出てしまうが、 Debug.Printにすれば、実行後にまとめて見られる。文書部分を少量残して他は削除して、 テストして、様子を実感しては。 Sub ルビを抽出する2() 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 y = myField.Code.Text MsgBox y '--- p1 = InStrRev(y, ")") p2 = InStrRev(Left(y, p1 - 1), ",") p3 = InStrRev(Left(y, p2 - 1), "(") '--- kanj = Mid(y, p2 + 1, p1 - p2 - 1) ruby = Mid(y, p3 + 1, p2 - p3 - 2) MsgBox kanj & "-" & ruby End If End If Next 'カーソル位置を元に戻す myRange.Select 'Rangeオブジェクトの解放 Set myRange = Nothing Application.ScreenUpdating = True End Sub Word2013で、少数例で、テスト済み。 これを改造する力がなければ、(関係業界の人でもなければ)あきらめざるを得ない。 今更VBAを勉強しても、特にWordVBAは、苦労するだけ。出版や印刷とか研究の関係者なら 、他のシステムの経験者なら、若ければ、首を突っ込むのも、有かも。 もし200箇所ぐらい以下なら、手作業でカードにでも書き出して、後処理を考えてはどうか。

karinkadoya
質問者

お礼

ありがとうございました。 印刷用データの組版用に、InDesignで使用するのが目的でした。冊子用に100ページ近くのデータを制作します。 現在は、テキスト出力したデータをInDに貼り込み、不要なデータを削除した後に、タブを追加。漢字に位置合わせするといった、プリミティブな方法をとっています。 設定箇所は、200箇所以上。VBAを勉強することは、これからも役立ちそうですが、時間に余裕があるときに試してみることにします。 検索してもヒットしない理由が理解できました。 これにて、解決といたします。

関連するQ&A