Wordでパスワードなしで上書き保存するマクロ

以前、パスワードが設定されているExcelを開いた後、パスワードなしで上書き保存するマクロを紹介しましたが、今回はそのWord版です。
Excel2013で確認しました。 (さらに…)

Wordの見出しの番号種類を変える方法

Wordでアウトラインを使っているときに、見出しの番号種類を変える方法を紹介します。
例えばアラビア数字の「1.見出し」のような見出しをローマ数字の「I.見出し」のように変えます。
Word2007、Word2013で確認しました。 (さらに…)

Wordで無選択ならば行全体を切り取りまたはコピーするマクロ

VSCodeでは 文字列を選択して Ctrl+X とすると切り取り(カット)になりますが、選択せずに Ctrl+X とするとカーソルのある行全体を切り取ります。Ctrl+Cも無選択ならば行全体をコピーします。
SublimeTextも同様の動作をします。
調べてみたところ、以前から使用しているサクラエディタも同様でした。これは知りませんでした。テキストエディタだとよくある機能なのかもしれません。確かに便利です。

一方、ワープロソフトのWordはこのような動作はありません。選択した文字列を切り取り、コピーしますが、無選択では何も起きません。
そこでWordにもこの機能を追加してみます。マクロを使います。 (さらに…)

Wordで履歴付き上書き保存をするマクロ

以前、Excelのファイル名に日時を付けて保存するマクロを紹介しました。
ファイルを上書き保存する際に別途、日時を付けたファイルを保存することで「うっかり上書き」を防ぎます。
今回はこれのWord版を作りました。 (さらに…)

Wordで表紙からページが表示されなくなった場合の対処方法

以前、表紙の次からページ番号を付ける方法を紹介しましたが、今回、これが戻せなくなるケースがありました。
対処方法をメモしておきます。Word2007で確認しました。 (さらに…)

差し込み印刷で郵便番号にハイフンを入れる

元のデータが「1234567」となっている場合、これをWordの差し込み印刷で「123-4567」というようにハイフン「-」を入れて表示する方法です。フィールド名は「郵便番号」とします。Word2007で確認しました。

通常の差し込み印刷ではフィールドコードが「{ MERGEFIELD 郵便番号 }」となります。フィールドコードを見るにはAltキーを押しながらF9キーを押します。
このとき差し込み印刷では「1234567」とそのまま数値として表示されます。

桁を揃えるには「\#」を挿入した後に「0」や「#」を使います。桁の途中に文字を表示したいときにはその文字を入れればよいです。
例えば「{ MERGEFIELD 郵便番号 \# 000_0000 }」とすると「123_4567」と表示されます。

しかし「-」を入れようと「{ MERGEFIELD 郵便番号 \# 000-0000 }」とすると「123 4567」と表示されます。スペースになってしまいます。
実は「-」は数値書式スイッチの一つなので単純に入れると本来の機能が働いてしまうのです。

- (負符号) この書式項目は、実行結果が負の数である場合に、負符号を追加します。実行結果が正の数または 0 (ゼロ) である場合はスペースが追加されます。

記号をそのまま表示したい場合は、記号を「'」(アポストロフィ)で挟みます。

「{ MERGEFIELD 郵便番号 \# 000'-'0000 }」とすると「123-4567」と表示されます。

Wordで脚注を括弧書きに変換するマクロ

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

Sub 脚注を括弧に()
    Const kakkoLeft = "("
    Const kakkoRight = ")"
    Dim n As Long, kosu As Long
    Dim mae, ato As String
    Dim foottext(100) As String
    Const markLeft = "<<"
    Const markRight = ">>"
    Selection.HomeKey Unit:=wdStory
    With ActiveDocument.Content
        kosu = ActiveDocument.Footnotes.Count
        For n = 1 To kosu
            With ActiveDocument.Footnotes(1)
                foottext(n) = .Range.Text
            End With
            Selection.Find.Replacement.ClearFormatting
            With Selection.Find
                .Text = "^f"
                .Replacement.Text = markLeft & n & markRight
                .Wrap = wdFindContinue '処理を継続。
                .MatchWildcards = False '特殊文字を検索。
                .MatchFuzzy = False '20201011追加
            End With
            Selection.Find.Execute Replace:=1
            Selection.Font.Superscript = False
        Next n
    End With
    For n = 1 To kosu
        mae = markLeft & n & markRight
        ato = kakkoLeft & foottext(n) & kakkoRight
        Call 長い文字列の置換(mae, ato)
    Next n
    Selection.HomeKey Unit:=wdStory
End Sub

編集中の文書に変更を施しますので、マクロは文書を保存してから実行してください。ご利用は自己責任でお願いします。

2020年10月11日追記
「動作しない」とコメントをいただきました。
置換のパラメータとして「MatchFuzzy = False」を追加しました。

VBAで長い文字列に置換する方法

VBA(Word)で文字列の置換を行う場合、置換後の文字列が長すぎるとエラーになります。

実行時エラー5854
文字列型パラメータが長すぎます。

これを回避する方法を考えました。
次に挙げる二つの関数が必要です。「長い文字列の置換」がメインです。
使う場合は「call 長い文字列の置換(mae, ato)」のようにして使います。

全てを置換

ページ全体に対して置換を行うマクロです。これ自体は長い文字列に対応していません。

Function 全てを置換(mae, ato)
    'ページ全体に対して置換
    Dim myRange
    Set myRange = ActiveDocument.Range(Start:=0, End:=0)
    With myRange.Find
        .ClearFormatting
        .Text = mae
        With .Replacement
            .ClearFormatting
            .Text = ato
        End With
        .Execute Replace:=wdReplaceAll
    End With
End Function

長い文字列の置換

メインとなる部分です。
置換後の文字列が255文字を超えるとエラーになります。
まず置換後の文字列を250文字ずつ分割すると何個になるかを計算します。
もし700文字だとすると3個になります。
そこで、置換後の文字列を「{{1}}{{2}}{{3}}」として、とりあえず置換します。これが255文字を超えることはないでしょう。
次に置換後の文字列から250文字ずつ分割して「{{1}}」「{{2}}」「{{3}}」と置換します。それぞれは255文字を超えないのでエラーが出ません。

Function 長い文字列の置換(mae, ato)
    '置換後の文字列が255文字超に対応
    Const partLen = 250
    Const markLeft = "{{"
    Const markRight = "}}"
    Dim atoLen As Long, kaisu As Long, i As Long
    Dim markAll, part As String
    atoLen = Len(ato)
    kaisu = Int(atoLen / partLen + 1)
    markAll = ""
    For i = 1 To kaisu
        markAll = markAll & markLeft & i & markRight
    Next i
    Call 全てを置換(mae, markAll)
    For i = 1 To kaisu
        markAll = markLeft & i & markRight
        part = Mid(ato, partLen * (i - 1) + 1, partLen)
        Call 全てを置換(markAll, part)
    Next i
End Function

編集中の文書に変更を施しますので、マクロは文書を保存してから実行してください。ご利用は自己責任でお願いします。

Wordの一文字ぶら下げを行うマクロ

Wordで文章を書く際に行頭に記号を使う場合があります。
例えば次のようなケースです。

※この法律は、消費税について、課税の対象、納税義務者、税額の
計算の方法、申告、納付及び還付の手続並びにその納税義務の適正
な履行を確保するため必要な事項を定めるものとする。

特に書式を設定しなければ上のようになりますが、次のように二行目からはインデントを一文字分入れたいところです。

※この法律は、消費税について、課税の対象、納税義務者、税額の
 計算の方法、申告、納付及び還付の手続並びにその納税義務の適
 正な履行を確保するため必要な事項を定めるものとする。

こうするには、段落の設定で「最初の行」を「ぶら下げ」、「幅」を「1字」にします。
頻繁に設定するには面倒です。マクロを考えました。

Sub 一文字ぶら下げ()
    fs = ActiveDocument.Styles(wdStyleNormal).Font.Size
    With Selection.ParagraphFormat
        .LeftIndent = fs
        .FirstLineIndent = -fs
    End With
End Sub

設定したい行にカーソルを移動し、このマクロを実行すると二行目からインデントを一文字分入れてぶら下げにします。

これをクイックアクセスツールバーにセットしたり、キーボードショートカットとして設定したりすると便利です。

マクロを設定する方法とキーボードショートカットを設定する方法は「Wordで「テキスト貼り付け」にショートカットを割り当てる」で紹介しています。

Wordで先頭にある表の上に行を挿入する

Wordで文書の先頭に表を作成したとき、その上に空行を挿入するには、表の左上のセルにカーソルを移動してEnterを押します。
左上のセルに文字が入っているときはその左端にカーソルを移動してEnterです。
つまり、その文書の先頭、左端にカーソルを移動させてEnterすればよいのです。

表の上に行があるときはセル内で改行されるだけです。2ページ以降のときもセル内で改行されます。
表の先頭行にカーソルを移動して表の分割(表ツール-レイアウト-結合-表の分割)でも表の上に行が挿入されます。

新しい記事 | 古い記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報