うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

Macで分離した濁点・半濁点を結合するWordマクロ

Macで、PDFからWordにコピペすると、ひらがな・カタカナに付された濁点・半濁点が分離する問題がある*1

たとえば、PDF文書から「ぞうきん」という言葉をコピーして、Wordにペーストする。

そして、「ぞ」の文字をバックスペースで消そうとすると、濁点のみが消されて、「そうきん」になる。この「ぞ」の文字数は2文字としてカウントされるので、文字数管理の際に厄介である。見た目は1文字の「ぞ」と区別できないが、Wordの検索・置換機能では区別される。

ここでは、このように、ひらがな・カタカナに付された濁点・半濁点が分離した文字を、1文字に結合する(正確には、対応する1文字のひらがな・カタカナに置換する)Wordマクロを紹介する*2

修正したい文字列を選択して、このマクロを実行すれば、濁点・半濁点の分離の問題は解決するだろう。

Sub 濁点結合()
'
' 濁点結合 Macro
'
'
    Dim before
    Dim after
   
    before = Array("か" & ChrW(12441), "き" & ChrW(12441), "く" & ChrW(12441), "け" & ChrW(12441), "こ" & ChrW(12441), "さ" & ChrW(12441), "し" & ChrW(12441), "す" & ChrW(12441), "せ" & ChrW(12441), "そ" & ChrW(12441), "た" & ChrW(12441), "ち" & ChrW(12441), "つ" & ChrW(12441), "て" & ChrW(12441), "と" & ChrW(12441), "は" & ChrW(12441), "ひ" & ChrW(12441), "ふ" & ChrW(12441), "へ" & ChrW(12441), "ほ" & ChrW(12441), "は" & ChrW(12442), "ひ" & ChrW(12442), "ふ" & ChrW(12442), "へ" & ChrW(12442), "ほ" & ChrW(12442), "カ" & ChrW(12441), "キ" & ChrW(12441), "ク" & ChrW(12441), "ケ" & ChrW(12441), "コ" & ChrW(12441), "サ" & ChrW(12441), "シ" & ChrW(12441), "ス" & ChrW(12441), "セ" & ChrW(12441), "ソ" & ChrW(12441), "タ" & ChrW(12441), "チ" & ChrW(12441), "ツ" & ChrW(12441), "テ" & ChrW(12441), "ト" & ChrW(12441), "ハ" & ChrW(12441), "ヒ" & ChrW(12441), "フ" & ChrW(12441), "ヘ" & ChrW(12441), "ホ" & ChrW(12441), "ハ" & ChrW(12442), "ヒ" & ChrW(12442), "フ" & ChrW(12442), "ヘ" & ChrW(12442), "ホ" & ChrW(12442))
    after = Array("が", "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ", "だ", "ぢ", "づ", "で", "ど", "ば", "び", "ぶ", "べ", "ぼ", "ぱ", "ぴ", "ぷ", "ぺ", "ぽ", "ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド", "バ", "ビ", "ブ", "ベ", "ボ", "パ", "ピ", "プ", "ペ", "ポ")
   
    For i = 0 To UBound(before)
        With Selection.Find
            .ClearFormatting
            .MatchFuzzy = False
            .Text = before(i)
            With .Replacement
                .ClearFormatting
                .Text = after(i)
            End With
            .Wrap = wdFindStop
            .Execute Replace:=wdReplaceAll
        End With
    Next i
End Sub

*1:この問題は、すでに多くのサイトで紹介されている。たとえば、下記記事を参照。

*2:本マクロ作成にあたっては、下記サイトを参考にした。