概要
Wordの脚注部分を本文中に移動させるマクロを考えてみました。
脚注は注意書きが各ページの下部に表示されるイメージですが、これを括弧で括って本文中に戻します。これによりテキストファイルにしても注意書きが失われません。
逆に本文中の括弧書きを脚注に変換させるマクロも考えてみました。
「(注意書き)」の「注意書き」の部分を脚注に表示します。括弧については全角括弧「()」を想定していますが、書き換えれば「【】」や「《》」でも動作します。
当然のことかもしれませんが、編集中の文書に変更を施しますので、マクロは文書を保存してから実行してください。できればバックアップを取ってください。例によってご利用は自己責任でお願いします。
マクロ
宣言部分
括弧については全角括弧「()」を想定しています。
「【】」や「《》」を使う場合はここを書き換えます。
Const strstart = "("
Const strend = ")"
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
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
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
括弧書きならばすべて変換してしまうので、通常の括弧は半角括弧、脚注にしたい部分は全角括弧やその他の記号を使うなど区別してください。あるいは変換したい部分だけ別文書にコピーしてマクロを実行してから戻すという方法も考えられます。
コメント
参考になります。ありがとうございます。
ワードのマクロ初心者です。ぜひこのマクロを自分でも使ってみたいのですが、宣言部分というのは、どこに入力すればよいのでしょうか。
申し訳ありませんがどうぞ教えてください。
重ねてお邪魔いたします。上の問題ですが、解決しました。
宣言部分をVBAの中に書き込んだら、マクロが使えました。
どうもありがとうございました。
>butamimiさん
ご利用ありがとうございます。
分かりにくくて申し訳ありませんでした。
何度もお邪魔してすみません。
「括弧を脚注に」はできたのですが、「脚注を括弧に」の方がうまくいかなくて困っています。問題は、置換される部分の文字数が255文字を超えてしまうためであるらしく、エラー 5854 が出てしまうのです。
ネットで検索してみたところ、以下のような記事があり、250文字を超える置換部分を250文字ごとに分けるといった技法が紹介されていました。
http://stackoverflow.com/questions/5050902/runtime-error-5854-string-parameter-is-too-long
しかし初心者である私には、このプログラムを、Stabucky さんのVBAとどのように組み合わせればよいのか、わかりません。申し訳ないのですが、どうぞご教示いただければ幸いです。よろしくお願いします。
>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
こんな感じでしょうが、残念ながら手元に確認できる環境がありません。
[…] 以前、脚注を括弧書きに変換するマクロを紹介しました。 しかし、脚注が長すぎると(255文字超)、エラーになります。 これを改良して、脚注が長くても対応できるようにしました。 次に紹介するマクロの他に、以前、紹介した「長い文字列の置換」「全てを置換」の二つの関数が必要になります。 括弧書きの括弧はkakkoLeftとkakkoRightで指定します。 […]