フォルダを指定し、その中の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
'置換文字列の指定
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
コメント
mypath = .SelectedItems(1) & “”
↓
mypath = .SelectedItems(1) & “\”
ではないですか?
ramerikaさん
ご指摘のとおりです。修正しました。ありがとうございました。
大変参考になりましのた。しかしながら、これだとヘッダ部分置換が出来ないようです。
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
perlsky さん
StoryRangesを使うのですね。ありがとうございます。
こんにちは。大変役に立つマクロを公開されていて、ありがとうございます。
ご相談なのですが、業務で200ほどあるワードファイルの30~40単語を置換したいと考えています。
こちらのマクロと以下のマクロを掛け合わせたマクロを作りたいのですが、お仕事でご相談にのっていただくことはできるのでしょうか?
https://stabucky.com/wp/archives/2309
突然のご連絡で申し訳ございません。
>新後閑真さん
複数のワードファイルに対して複数の置換作業を一気に行いたいということですか。
確かに二つのマクロを組み合わせればできる気がします。
お約束はできませんが試してみます。
stabucky様
お返事ありがとうございます!
色々と検索して、本サイトにヒットしましたが、業務改善の道が開けた気持ちです!!
>新後閑真さん
記事を書きました。試していただけると助かります。
https://stabucky.com/wp/archives/13067
[…] Wordで文字列リストを元に連続して置換するマクロ 複数のWord文書に対して文字列置換 […]
実行すると
Call 文書全体を置換(mae, ato)
の場所で、VBAエラー424 「オブジェクトが必要です」というエラーが発生しました。
解決策を教えて下さい。
貴重なサンプルプログラムありがとうございます。
ループで複数回処理する場合、エラーがでてしまします。(二週目)
ここの部分→Documents.Open FileName:=Txt_FileFol_Mae & myfile
・オートメーションエラーです。リモートプロシージャーコールに失敗しました
もしくは
・リモートザーバーがないか使用できる状態ではありません
調べてみたのですが、改善策がわかりませんでした。ご教授いただけましたらと思います。
宜しくお願い致します。
>Yさん
遅くなりました。
状況が確認できませんでした。
申し訳ありません。
>アロハッティーさん
状況が確認できませんでした。
エラーの意味もわかりません。
申し訳ありません。
[…] 複数のWord文書に対して文字列… […]
公用文書の読点には「,」(コンマ)ではなく「、」(テン)を用いることが原則となったようです。何か簡単な方法はないかなと探したところ、こちらのサイトを見つけました。当方のサイトでも紹介させていただきます。
>影本様
ご利用、ご紹介、ありがとうございました。
これですね。
公用文に「?」「!」使えます!…国家公務員向け手引、70年ぶり見直し
https://www.yomiuri.co.jp/national/20220107-OYT1T50309/