複数のWordファイルを検索して置換するにはどうすればよいですか?


10

(プロセスの自動化を目的として)多くのWord(.doc)ファイルで検索と置換を行う方法を探しています。

これまでに見つけたソフトウェアでは、検索のみが可能で、置き換えはできません。

Wordでそれを行うにはどうすればよいですか?

回答:


7

VBAの検索と置換(キャッシュリンク)試すことができます。

VBA Find and Replace©は、単一のユーザー定義の「find」と「replace」変数のペア、またはユーザー定義の「find」と「replace」のリストを使用して、ドキュメント(またはドキュメントのコレクション)の任意の場所でテキストを検索および置換する方法を提供しますペア。また、テキストを検索し、見つかったテキストをユーザー定義の「定型句」または「ビルディングブロック」のエントリに置き換える方法も提供します。


これは私が欲しかったもののように見えます-あなたはロックです!
タルガリリ

このプラグインはどのファイルを検索しますか?開始ディレクトリを指定する可能性が見つかりません。開いているすべてのファイルのみを使用しますか?そして、置換せずに検索するにはどうすればよいですか?
マイケルS.

2
@gentleseaの「バッチフォルダー内のファイルの処理」設定は役に立ちませんか?
ジェイウィック2013

1
そのURLの末尾に余分なピリオドがあります–私はそれを削除しますが、StackOverflowは正しく設計されておら
Chris Adams

1
ありがとう、本当に感謝しています。(:
p._phidot_

0

特定のルートフォルダーの下の複数のフォルダーにある複数のMS Wordファイルで複数の通常およびワイルドカードベースの置換を実行する目的で、次のVBAマクロを作成しました。それを使用するには、次の変数(定数)の内容を変更します。

  • rootPath:Word文書を含むフォルダが配置されているルートフォルダ。
  • findTextsWildおよびreplaceTextsWild:ワイルドカードベースの検索および置換式の配列。
  • findTextsおよびreplaceTexts:通常の検索および置換式の配列。

あなたはそれが役に立つと思うかもしれません:-)

Sub GlobalTextReplacement()
' Root under which all manuals are stored
Dim rootPath As String
rootPath = "c:\Data\Manuals\"

' Find and replace text for wildcard replacement. Performed first.
Dim findTextsWild() As Variant, replaceTextsWild() As Variant
findTextsWild = Array("[ ]{2;}", "[cC]onfiguration[/ ]@[pP]olicy [rR]epository", "[sS]ervlet[- ]@[fF]ilter")
replaceTextsWild = Array(" ", "Configuration/Policy Repository", "Servlet-Filter")

' Find and replace text for normal case insensitive replacement. Performed second.
Dim findTexts() As Variant, replaceTexts() As Variant
findTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "servletfilter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p ", " ^p")
replaceTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "Servlet-Filter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p", "^p")

' Main code
Application.ScreenUpdating = False

Dim dirNames(20) As String
Dim dirNamesCount As Integer
dirNamesCount = 0

Dim dirName As String
dirName = Dir$(rootPath & "*", vbDirectory)
Do Until LenB(dirName) = 0
    Dim dirPath As String
    dirPath = rootPath & dirName
    If ((GetAttr(dirPath) And vbDirectory) = vbDirectory) And (dirName <> ".") And (dirName <> "..") Then
        dirNamesCount = dirNamesCount + 1
        dirNames(dirNamesCount) = dirPath & "\"
    End If
    dirName = Dir$
Loop

Do While dirNamesCount > 0
    Dim fileName As String
    dirName = dirNames(dirNamesCount)
    dirNamesCount = dirNamesCount - 1
    fileName = Dir$(dirName & "*.doc", vbDirectory)
    Do Until LenB(fileName) = 0
        Dim filePath As String
        filePath = dirName & fileName
        fileName = Dir$

        Dim document As document
        Set document = Documents.Open(filePath)
        document.TrackRevisions = True

        document.Select

        Dim i As Integer, maxIndex As Integer
        maxIndex = UBound(findTextsWild)
        For i = LBound(findTextsWild) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTextsWild(i)
                .Replacement.Text = replaceTextsWild(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchWildcards:=True
            End With
        Next

        maxIndex = UBound(findTexts)
        For i = LBound(findTexts) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTexts(i)
                .Replacement.Text = replaceTexts(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchCase:=False, MatchWildcards:=False
            End With
        Next

        document.Save
        document.Close
    Loop
Loop

Application.ScreenUpdating = True
End Sub


-1

Microsoft Wordを所有しておらず、あなたに役立つ無料の代替手段を探している場合は、OpenOffice.orgを試してください。

このプロセスを自動化する方法を探している場合、これが役に立たないと思います。


-1

Notepad ++は「ファイルから検索」を使用してこれを行うことができます


キーボードショートカットCtrl + Shift + F
Yitzchak

2
Notepad ++はMicrosoft Word文書を開くことができますか?
ダニエルベック

1
これは、文字列の一致と置換文字列が特殊文字でない場合に機能する場合があります。Word2007+のドキュメントは、本来XMLファイルであるためです。しかし、私はそうするかもしれないと言いました。回答として投稿する前に、これをテストすることに関心がありますか。
tumchaaditya 2014年

-2
Option Explicit

Public Sub BatchReplaceAll()
    Dim FirstLoop As Boolean
    Dim myFile As String
    Dim PathToUse As String
    Dim myDoc As Document
    Dim Response As Long

    PathToUse = ActiveDocument.Path
    On Error Resume Next
    Documents.Close SaveChanges:=wdPromptToSaveChanges
    FirstLoop = True
    myFile = Dir$(PathToUse & "\*.doc*")

    While myFile <> ""
        Set myDoc = Documents.Open(PathToUse & "\" & myFile)
        If FirstLoop Then
            Application.Dialogs(wdDialogEditReplace).Show
            FirstLoop = False

            Response = MsgBox("Do you want to process the rest of the files in this folder", vbYesNo)
            If Response = vbNo Then Exit Sub
        Else
            With Dialogs(wdDialogEditReplace)
                .ReplaceAll = 1
                .Execute
            End With
        End If
        myDoc.Close SaveChanges:=wdSaveChanges
        myFile = Dir$()
    Wend
End Sub

3
このコードブロックとは何ですか、何をしますか。また、この問題の解決にどのように役立ちますか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.