複数のWord文書に対して文字列置換

Pocket

フォルダを指定し、その中のWord文書に対して、文字列の置換をするマクロです。
まず置換前の文字列と置換後の文字列を入力します。
その後、フォルダを選択します。
実行されるとファイルを開き置換を行い上書き保存します。これを繰り返します。

Sub 複数文書連続処理_文字列置換()
    '置換文字列の指定
    mae = InputBox("置換前の文字列を入力してください。", "置換前")
    If mae = "" Then Exit Sub
    ato = InputBox("置換後の文字列を入力してください。", "置換後")
    If ato = "" Then Exit Sub
    'フォルダの選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択"
        .AllowMultiSelect = False
        If .Show = -1 Then
            mypath = .SelectedItems(1) & "\"
        Else
            MsgBox "終了します。"
            Exit Sub
        End If
    End With
    '実行
    res = MsgBox(mypath & "のフォルダ内のWord文書について「" & mae & "」を「" & ato & "」に置換します。よろしいですか。", vbOKCancel)
    If res = vbCancel Then Exit Sub
    myfile = Dir(mypath & "*.doc*")
    Do While myfile <> ""
        Documents.Open FileName:=mypath & myfile
        Call 文書全体を置換(mae, ato)
        ActiveWindow.Close SaveChanges:=wdSaveChanges
        myfile = Dir
    Loop
End Sub
Function 文書全体を置換(mae, ato)
    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

[ 2016年1月12日 | カテゴリー: Word | タグ: ]

« | »

コメント

  1. ramerika より:

    mypath = .SelectedItems(1) & “”

    mypath = .SelectedItems(1) & “\”
    ではないですか?

  2. stabucky より:

    ramerikaさん
    ご指摘のとおりです。修正しました。ありがとうございました。

  3. perlsky より:

    大変参考になりましのた。しかしながら、これだとヘッダ部分置換が出来ないようです。
    Function の中を以下の通りに変更したところ、ヘッダの置換もうまく行きました。
    Dim myStoryRange As Range

    For Each myStoryRange In ActiveDocument.StoryRanges
    With myStoryRange.Find
    .Text = mae
    .Replacement.Text = ato
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
    End With
    Do While Not (myStoryRange.NextStoryRange Is Nothing)
    Set myStoryRange = myStoryRange.NextStoryRange
    With myStoryRange.Find
    .Text = mae
    .Replacement.Text = ato
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
    End With
    Loop
    Next myStoryRange

  4. stabucky より:

    perlsky さん
    StoryRangesを使うのですね。ありがとうございます。

  5. 新後閑真 より:

    こんにちは。大変役に立つマクロを公開されていて、ありがとうございます。
    ご相談なのですが、業務で200ほどあるワードファイルの30~40単語を置換したいと考えています。
    こちらのマクロと以下のマクロを掛け合わせたマクロを作りたいのですが、お仕事でご相談にのっていただくことはできるのでしょうか?

    https://stabucky.com/wp/archives/2309

    突然のご連絡で申し訳ございません。

  6. stabucky より:

    >新後閑真さん
    複数のワードファイルに対して複数の置換作業を一気に行いたいということですか。
    確かに二つのマクロを組み合わせればできる気がします。
    お約束はできませんが試してみます。

  7. 新後閑真 より:

    stabucky様
    お返事ありがとうございます!
    色々と検索して、本サイトにヒットしましたが、業務改善の道が開けた気持ちです!!

  8. stabucky より:

    >新後閑真さん
    記事を書きました。試していただけると助かります。
    https://stabucky.com/wp/archives/13067

  9. […] Wordで文字列リストを元に連続して置換するマクロ 複数のWord文書に対して文字列置換 […]

  10. Y より:

    実行すると
    Call 文書全体を置換(mae, ato)
    の場所で、VBAエラー424 「オブジェクトが必要です」というエラーが発生しました。
    解決策を教えて下さい。

  11. アロハッティー より:

    貴重なサンプルプログラムありがとうございます。
    ループで複数回処理する場合、エラーがでてしまします。(二週目)
    ここの部分→Documents.Open FileName:=Txt_FileFol_Mae & myfile
    ・オートメーションエラーです。リモートプロシージャーコールに失敗しました
    もしくは
    ・リモートザーバーがないか使用できる状態ではありません
    調べてみたのですが、改善策がわかりませんでした。ご教授いただけましたらと思います。
    宜しくお願い致します。

  12. stabucky より:

    >Yさん
    遅くなりました。
    状況が確認できませんでした。
    申し訳ありません。

  13. stabucky より:

    >アロハッティーさん
    状況が確認できませんでした。
    エラーの意味もわかりません。
    申し訳ありません。

  14. 影本賢治 より:

    公用文書の読点には「,」(コンマ)ではなく「、」(テン)を用いることが原則となったようです。何か簡単な方法はないかなと探したところ、こちらのサイトを見つけました。当方のサイトでも紹介させていただきます。

  15. stabucky より:

    >影本様
    ご利用、ご紹介、ありがとうございました。
    これですね。
    公用文に「?」「!」使えます!…国家公務員向け手引、70年ぶり見直し
    https://www.yomiuri.co.jp/national/20220107-OYT1T50309/

コメントを残す

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

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報