• 現代ファンタジー
  • 歴史・時代・伝奇

【青空文庫形式のふりがなをワードのふりがなに替えるマクロ】

マクロ名は、AozoraRubyToWordRubyとしています。以下が、マクロです。Window 11で以下をスクショして、テキスト化すればWordで使用できます。

Sub AozoraRubyToWordRuby()

'--- 検索用のRangeを全体に設定 ---
Dim rngSearch As Range
Set rngSearch = ActiveDocument.Content

With rngSearch.Find
.ClearFormatting
' ワイルドカード検索を有効化
.MatchWildcards = True

' 「|(任意文字1回以上)《(任意文字1回以上)》」にマッチさせる
' ※ 「[!《]」や「[!》]」など細かい制限を入れる場合は適宜修正する
.Text = "|(*)《(*)》"

.Replacement.Text = ""
.Wrap = wdFindStop
.Forward = True
.Format = False
End With

'--- 検索ループを回す ---
Do While rngSearch.Find.Execute = True

'--- マッチしたテキスト(例: "|柴風《チャイ・フェン》")を取得 ---
Dim matchString As String
matchString = rngSearch.Text

Dim parentText As String
Dim rubyText As String

'--- InStrで「《」と「》」の位置を探す ---
Dim posOpen As Long
Dim posClose As Long

posOpen = InStr(matchString, "《")
posClose = InStr(matchString, "》")

If posOpen > 0 And posClose > posOpen Then

' 例: matchString = "|柴風《チャイ・フェン》"
' posOpen = 4, posClose = 10(仮)

' 1) 親文字(柴風)を抽出
' "|"が先頭に1文字いるので、そこを除き、
' "《" の直前までを取り出す
' Mid(文字列, 開始位置, 文字数)
' 開始位置 = 2 → "|"(1文字)飛ばし
' 文字数 = posOpen - 2
'
' matchStringの文字数より安全を見てエラー回避するなら
' posOpen - 2 の部分にIfでチェックをかける場合もある

parentText = Mid(matchString, 2, posOpen - 2)

' 2) ルビ文字(チャイ・フェン)を抽出
' "《" と "》" の間を取り出すので
' 開始位置 = posOpen + 1("《"の次)
' 文字数 = posClose - (posOpen + 1)

rubyText = Mid(matchString, posOpen + 1, posClose - (posOpen + 1))

Else
' 万が一「《」や「》」が見つからない場合はスキップ
GoTo NextMatch
End If

'--- 今のRangeに親文字だけを残し、置き換える ---
rngSearch.Text = parentText

'--- Wordのルビを振る ---
' PhoneticGuideメソッドは「位置引数」で渡す必要がある。
' 1. ルビ(上に乗せる文字列)
' 2. ルビ配置(wdPhoneticGuideAlignmentCenter 等)
' 3. ルビの上下移動量 (Raise)
' 4. フォントサイズ (FontSize)
' 5. フォント名 (FontName)

rngSearch.PhoneticGuide rubyText, _
wdPhoneticGuideAlignmentCenter, _
0, _
9, _
"MS 明朝"

NextMatch:
'--- 次へ移動(検索範囲を末尾に寄せる) ---
rngSearch.Collapse Direction:=wdCollapseEnd

Loop

End Sub


コメント

コメントの投稿にはユーザー登録(無料)が必要です。もしくは、ログイン
投稿する