本文では、Word 文書のバッチ処理の能力を 3 つ実現します:1)テキストの置換 + 書式付き、2)最後のページの削除、3)文末に内容を追加。⚠️:使用する前に必ずバックアップを取ってください、バックアップを取ってください、バックアップを取ってください!
週末の朝☀️、彼女がコンピュータ💻の前でエモい顔をしているのを見つけました。私は彼女👀を見つめ、彼女は言いかけては止まり🤭、私に一緒に残業してほしいようです😭。
しかし、プログラマーとして、私はこの女性弁護士👩🏻💼に何を手伝えるのでしょうか?
彼女はついに口を開き🎙️ました:「私たちの上司が、これらの数百の Word 文書の中で、この部分をこれに置き換え、あの部分をあれに置き換え、この書式をこれに変更し、あの書式をあれに変更し、最後のページの内容は削除して、他の内容に置き換えて...」
私:おお?これは重労働🧱のようですね?どうしてあなたたちにやらせるのですか?私に任せてください!
要件分析#
背景:女性弁護士は数百の Word 文書を規則的に処理する必要があり、約束していた週末のハイキングは台無しになりそうです?
要件:
- バッチ処理:Word 文書を一つずつ手動で開く必要がない;
- テキスト置換:A→B;
- 最後のページを削除;
- 文末に内容を追加。
解決策#
長い間使っていなかった Windows コンピュータを取り出し、Word を開きます。
「サードパーティツール」と「自分で作成した VBA」の 2 つの方法を組み合わせて、最終的にこのタスクを完了しました。✅ ✅ ✅
前提知識:VBA#
バッチ処理を実現するためには、まず VBA を理解する必要があります:
Visual Basic for Applications(VBA)は Visual Basic のマクロ言語で、Microsoft がデスクトップアプリケーションで一般的な自動化タスクを実行するために開発したプログラミング言語で、Microsoft Office ソフトウェアの機能を拡張するためによく使用されます。
私たちは Word に付属している「開発ツール」を使って VBA マクロを作成できます。この開発ツールの入口はここにあります:
このタブがない場合は、Word > ファイル > オプション > リボンのカスタマイズからこのタブを追加する必要があります:
次に、開発ツール > コード部分を使って VBA を作成できます~
マクロの録音の役割について:どの Visual Basic やプロパティを使用するか不明な場合は、マクロを録音することで、Word で手動で実行する操作を自動的に Visual Basic コードに変換し、必要な操作を明確にするためにコードを少し調整することができます。具体的な手順は公式文書を参照してください —— Microsoft 技術文書:マクロを録音してコードを生成する。
サードパーティツール:WordSR#
待って、「テキストのバッチ置換」という一般的な機能は誰かがすでに実装しているはずです。やはり、Funduc Software 社が開発したソフトウェア、Word Search and Replace 2.40があります。これはグラフィカルインターフェースもあります:(この会社はアップグレード版の Replace Studio Pro、Replace Studio Business Edition、Search and Replace の 3 兄弟も開発しましたが、中国語文書の検索には文字化けの問題があります。実際に試してみて、興味がある方は研究してみてください)
Word の検索置換機能に似ていますが、複数ファイルの選択機能が追加されています。
1)最初の入力ボックス:検索する内容を入力;
2)2 番目の入力ボックス:置換後の内容を入力;
3)3 番目の入力ボックス:バッチ処理するファイルのパスを入力。注意、*.doc
は処理するフォルダ内のすべての.doc
ファイルを示し、*.doc*
は*.docs
ファイルも処理します。
PS:正規表現にも対応しており、「Use Pattern Matching」をチェックするのを忘れないでください;フォルダ内のサブフォルダ内の文書も置換する必要がある場合は、「Search Subdirectories」をチェックしてください。
使用手順:
⚠️:使用する前に必ずバックアップを取ってください、バックアップを取ってください、バックアップを取ってください。
1)http://www.funduc.com/word_sr.htmのウェブページにアクセスし、ソフトウェアの圧縮ファイルをダウンロードします。
2)解凍後、以下のように、WordSR_240_64bit.docm ファイルをダブルクリックして開きます(システムと Office のバージョンに応じて選択します。現在使用しているコンピュータは一般的に 64bit システムです)。
3)Double Click Here To Run Word Search and Replace テキストをダブルクリックします(Word がセキュリティ警告を表示した場合:マクロが無効になっている場合は、最初に「コンテンツを有効にする」をクリックしてください)、その後、楽しく使用できます~
注:上記の文書にも詳細な使用説明がありますので、わからないことがあれば一度見てみてください;開発ツール > Visual Basic をクリックすることで、ソースコードも確認できます。本質的には VBA です。
さて😊、このサードパーティツールを使って、私は女性弁護士の大部分の置換作業を完了しましたが、特定のテキストに太字や下線を追加するなどのカスタマイズされた要件が残っています。自分で手を動かして、豊かさを得る。
カスタマイズ機能#
カスタマイズされた要件は:1)書式付きのテキスト置換;2)最後のページの削除;3)文末に内容を追加
0)バッチ処理#
まず、これらの要件を実現するために最も重要なのはバッチ処理の能力、つまりフォルダをループして処理する能力⭐️です。
コードは以下の通りです:(コードにはいくつかの注釈を追加しており、理解しやすく、必要に応じて修正しやすくしています。)
Sub フォルダをループ処理()
'
' フォルダをループ処理するマクロ
'
'
On Error Resume Next 'マクロ内で「実行時エラー」が発生した場合、プログラムは中断せずに続行します
Dim objShell As Object, objFolder As Object, pPath$, f As Object, fd As Object, fso As Object, Stack$(), top&, n&, stxt$, doc As Document, x&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "バッチ処理するフォルダを選択してください!", 0, 0)
If (objFolder Is Nothing) Then Exit Sub 'キャンセルが選択された場合は直接終了
'フォルダのパスを取得
pPath = objFolder.self.Path & ""
Set objShell = Nothing
Set objFolder = Nothing
Set fso = CreateObject("Scripting.FileSystemObject")
top = 1
ReDim Stack(0 To top)
'フォルダをループ処理し、サブフォルダも含める(スタック構造を利用)
Do While top >= 1
For Each f In fso.GetFolder(pPath).Files
n = n + 1
stxt = f.Path
' .docおよび.docsファイルを処理
If stxt Like "*.doc*" Then
Set doc = Documents.Open(FileName:=stxt, Visible:=True) 'VisibleをTrueに設定すると、一部の操作が可視状態でなければ効果がありません
Call テキスト置換 '【単一文書の処理方法】任意のマクロを選択してください!
doc.Close SaveChanges:=wdSaveChanges ':=はパラメータに値を割り当てるために使用されます
x = x + 1
End If
Next
For Each fd In fso.GetFolder(pPath).SubFolders
Stack(top) = fd.Path
top = top + 1
If top > UBound(Stack) Then ReDim Preserve Stack(0 To top)
Next
If top > 0 Then pPath = Stack(top - 1): top = top - 1 '":"は2つの文を接続するために使用されます
Loop
Set f = Nothing
Set fd = Nothing
Set fso = Nothing
'関数の戻り値を使用しない場合は括弧は不要ですが、必要な場合はパラメータを括弧で囲む必要があります
MsgBox "フォルダには " & n & " 個のファイルがあります!" & vbCr & "Word文書(*.docx/*.doc)を " & x & " 個処理しました!", 0 + 48
End Sub
このコードは特定のフォルダをループ処理し、その中の各ファイルに同じ処理を行います。この処理方法は Call テキスト置換
という行のコードによって決まります。
そして テキスト置換
は以下に記載されたマクロであり、関数として理解することもできます。
1)書式付きのテキスト置換#
コードは以下の通りです:(同様に、注釈を追加しており、必要に応じてフォーマットを変更できます)
Sub テキスト置換()
'
' テキスト置換マクロ
'
'
With ActiveDocument.Content.Find
.ClearFormatting
With .Replacement
.ClearFormatting
.Font.Bold = True 'フォントを太字に
.Font.Underline = wdUnderlineSingle '単一の下線を追加
End With
'検索して置換を実行:'FindTextは検索するテキスト、ReplaceWithは置換後のテキスト、FormatはTrueで書式付き
'"_"は改行に使用されます
.Execute _
FindText:="公众号", _
ReplaceWith:="Bo2SS", _
Format:=True, _
Replace:=wdReplaceAll 'wdReplaceAllはすべてを置換、wdReplaceOneは一度だけ置換
End With
End Sub
2)最後のページを削除#
コードは以下の通りです:(注釈を参照)
Sub 最後のページを削除()
'
' 最後のページを削除するマクロ
'
'
Dim pageNum As Long, StartPage As Long, EndPage As Long
'総ページ数を取得
pageNum = Word.ActiveDocument.Range.Information(wdNumberOfPagesInDocument)
'最後のページの開始範囲を特定し、選択
StartPage = Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=pageNum - 1).Start
EndPage = ActiveDocument.Content.End
ActiveDocument.Range(StartPage, EndPage).Select
'選択した内容を削除
Selection.Delete
End Sub
バッチ処理コード内で、Call テキスト置換
を Call 最後のページを削除
に置き換えれば使用できます。
3)文末に内容を追加#
コードは以下の通りです:(注釈を参照)
Sub 文末に内容を追加()
'
' 文末に内容を追加するマクロ
'
'
Dim oRng As Range, oDoc As Document
Set oDoc = Word.ActiveDocument
Set oRng = oDoc.Content
With oRng
'文書の末尾に文字を挿入します。例えばChr(10)は改行を追加し、「こんにちは」は「こんにちは」を追加します
.InsertAfter Chr(10)
'.InsertAfter "こんにちは"
End With
End Sub
バッチ処理コード内で、Call テキスト置換
を Call 文末に内容を追加
に置き換えれば使用できます。
🔎 具体的な使用手順#
⚠️:使用する前に必ずバックアップを取ってください、バックアップを取ってください、バックアップを取ってください。
a) 開発ツールを選択 > マクロをクリック > マクロ名を入力 > 作成をクリック;
b)開いた VBA エディタに上記の 4 つのコードをコピーします;
c)カーソルを「フォルダをループ処理」マクロに移動し、F5 を押して実行します。フォルダ選択ウィンドウが表示され、フォルダを選択すると、その中の各ファイルに対して適切な処理が行われます!
ヒント#
- マクロの実行を強制停止する:Ctrl + break。
- VBA の使い方がわからない場合は、まずMicrosoft 技術文書: Word VBA 参考で答えを探してみてください!
- VScode には VSCode VBA というプラグインがあり、これを使って VBA を書くとより見栄えが良くなります~
どうですか?本当に Word 兄の遊び心を感じましたか?
Microsoft、リスペクト!
これで、彼女も早々にタスクを完了し、私たちは一緒に楽しくハイキングに行きました。この推送のカバーも今回のタスクの報酬の一つです👀~