Wordの脚注と括弧書きを相互に変換するマクロ

Pocket

Wordの脚注部分を本文中に移動させるマクロを考えてみました。
脚注は注意書きが各ページの下部に表示されるイメージですが、これを括弧で括って本文中に戻します。これによりテキストファイルにしても注意書きが失われません。
逆に本文中の括弧書きを脚注に変換させるマクロも考えてみました。
「(注意書き)」の「注意書き」の部分を脚注に表示します。括弧については全角括弧「()」を想定していますが、書き換えれば「【】」や「《》」でも動作します。
当然のことかもしれませんが、編集中の文書に変更を施しますので、マクロは文書を保存してから実行してください。できればバックアップを取ってください。例によってご利用は自己責任でお願いします。

宣言部分

括弧については全角括弧「()」を想定しています。
「【】」や「《》」を使う場合はここを書き換えます。

Const strstart = "("
Const strend = ")"

脚注を括弧に

脚注の注意書きを本文中に挿入します。
注意書きの取得はできたのですが、脚注位置の取得が難しいため、Wordの検索機能を利用し「^f」という脚注位置を表す特殊文字を注意書きに置換する手法を使っています。

Sub 脚注を括弧に()
    Dim n As Long, kosu As Long
    Dim rt As String
    With ActiveDocument.Content
        kosu = ActiveDocument.Footnotes.Count
        For n = 1 To kosu
            With ActiveDocument.Footnotes(1)
                rt = .Range.Text
            End With
            Selection.Find.Replacement.ClearFormatting
            With Selection.Find
                .Text = "^f"
                .Replacement.Text = strstart & rt & strend
                .Wrap = wdFindContinue '処理を継続。
                .MatchWildcards = False '特殊文字を検索。
            End With
            Selection.Find.Execute Replace:=1
            Selection.Font.Superscript = False
        Next n
    End With
    Selection.HomeKey Unit:=wdStory
End Sub

2014年9月1日追記
上のマクロについては改良版があります。

括弧を脚注に

本文中の括弧書きを脚注に変換します。
括弧書きの部分をワイルドカードを使って検索し、位置と文字列を取得、文字列の括弧を削除して、注意書きとしてセットするという手法です。

Sub 括弧を脚注に()
    Dim kekka As Boolean
    Dim mojiretsu As String
    Do
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = strstart & "*" & strend
            .Replacement.Text = ""
            .MatchPhrase = False '以下4行はワイルドカード使用時の矛盾回避のため。
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .MatchFuzzy = False
            .MatchWildcards = True
        End With
        kekka = Selection.Find.Execute
        If kekka Then
            '検索結果を整形。
            mojiretsu = Selection.Text
            mojiretsu = Replace(mojiretsu, strstart, "")
            mojiretsu = Replace(mojiretsu, strend, "")
            Selection.Cut
            With Selection
                With .FootnoteOptions
                    .Location = wdBottomOfPage
                    .NumberingRule = wdRestartContinuous
                    .StartingNumber = 1
                    .NumberStyle = wdNoteNumberStyleArabic
                End With
                .Footnotes.Add Range:=Selection.Range, Reference:=""
            End With
            Selection.TypeText Text:=mojiretsu
        End If
    Loop Until kekka = False
End Sub

括弧書きならばすべて変換してしまうので、通常の括弧は半角括弧、脚注にしたい部分は全角括弧やその他の記号を使うなど区別してください。あるいは変換したい部分だけ別文書にコピーしてマクロを実行してから戻すという方法も考えられます。

[ 2013年2月20日 | カテゴリー: Word | タグ: , ]

« | »

コメント

  1. butamimi より:

    参考になります。ありがとうございます。
    ワードのマクロ初心者です。ぜひこのマクロを自分でも使ってみたいのですが、宣言部分というのは、どこに入力すればよいのでしょうか。
    申し訳ありませんがどうぞ教えてください。

  2. butamimi より:

    重ねてお邪魔いたします。上の問題ですが、解決しました。
    宣言部分をVBAの中に書き込んだら、マクロが使えました。
    どうもありがとうございました。

  3. stabucky より:

    >butamimiさん
    ご利用ありがとうございます。
    分かりにくくて申し訳ありませんでした。

  4. butamimi より:

    何度もお邪魔してすみません。

    「括弧を脚注に」はできたのですが、「脚注を括弧に」の方がうまくいかなくて困っています。問題は、置換される部分の文字数が255文字を超えてしまうためであるらしく、エラー 5854 が出てしまうのです。

    ネットで検索してみたところ、以下のような記事があり、250文字を超える置換部分を250文字ごとに分けるといった技法が紹介されていました。

    http://stackoverflow.com/questions/5050902/runtime-error-5854-string-parameter-is-too-long

    しかし初心者である私には、このプログラムを、Stabucky さんのVBAとどのように組み合わせればよいのか、わかりません。申し訳ないのですが、どうぞご教示いただければ幸いです。よろしくお願いします。

  5. stabucky より:

    >butamimiさん
    文字列が長すぎると置換できないのですね。気が付きませんでした。
    リンク先を確認しました。
    この「SearchAndReplace」を使えばできるかもしれません。
    Sub 脚注を括弧に()
    With ActiveDocument.Content
    kosu = ActiveDocument.Footnotes.Count
    For n = 1 To kosu
    rt = ActiveDocument.Footnotes(1).Range.Text
    searchText = “^f”
    replaceText = strstart & rt & strend
    SearchAndReplace(searchText, replaceText)
    Next n
    End With
    End Sub
    こんな感じでしょうが、残念ながら手元に確認できる環境がありません。

  6. […] 以前、脚注を括弧書きに変換するマクロを紹介しました。 しかし、脚注が長すぎると(255文字超)、エラーになります。 これを改良して、脚注が長くても対応できるようにしました。 次に紹介するマクロの他に、以前、紹介した「長い文字列の置換」「全てを置換」の二つの関数が必要になります。 括弧書きの括弧はkakkoLeftとkakkoRightで指定します。 […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報