Bo2SS

Bo2SS

Wordのバッチ処理 | すごいですね Word 兄さん、実はあなたの遊び方はこんなに高いんですね!

本文では、Word 文書のバッチ処理の能力を 3 つ実現します:1)テキストの置換 + フォーマット付き、2)最後のページの削除、3)文末に内容を追加。⚠️:使用する前に必ずバックアップを取ってください、バックアップを取ってください、バックアップを取ってください!

image

週末の朝☀️、彼女がコンピュータ💻の前でエモい顔をしているのを見つけました。私は彼女を見つめ👀、彼女は言葉を飲み込んで🤭、私に一緒に残業してほしいようです😭。

しかし、プログラマーとして、私はこの女性弁護士👩🏻‍💼に何を手伝えるのでしょうか?

彼女はついに口を開き🎙️ました:「私たちの上司が、これらの数百の Word 文書の中で、このテキストをこれに置き換え、このテキストをこれに置き換え、このフォーマットをこれに変更し、このフォーマットをこれに変更し、そして最後のページの内容は削除して、他の内容に置き換えてほしいと言っています...」

私:お?これは重労働🧱のようですね?どうしてあなたたちにやらせるのですか?私に任せてください!

image


要件分析#

背景:女性弁護士は数百の Word 文書を規則的に処理する必要があります。約束していた週末のハイキングは台無しになりそうですか?

image

要件

  1. バッチ処理:Word 文書を一つずつ手動で開く必要はありません;
  2. テキストの置換:A→B;
  3. 最後のページを削除;
  4. 文末に内容を追加。

解決策#

長い間眠っていた Windows コンピュータを取り出し、Word を開きます。

「サードパーティツール」と「自分で作成した VBA」の 2 つの方法を組み合わせて、最終的にこのタスクを完了しました。✅ ✅ ✅

前提知識:VBA#

バッチ処理を実現するためには、まず VBA を理解する必要があります:

Visual Basic for Applications(VBA)は、Visual Basic のマクロ言語で、Microsoft がデスクトップアプリケーションで一般的な自動化タスクを実行するために開発したプログラミング言語で、Microsoft Office ソフトウェアの機能を拡張するためによく使用されます。

私たちは Word に付属の「開発ツール」を使用して VBA マクロを作成できます。この開発ツールの入口はここにあります:

image

このタブがない場合は、Word > ファイル > オプション > リボンのカスタマイズからこのタブを追加する必要があります:

image

次に、開発ツール > コード部分を通じて 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 のアップグレード版も開発しましたが、中国語文書の検索には文字化けの問題があります。実際に試してみて、興味がある方は研究してみてください)

image

Word の検索置換機能に似ていますが、複数ファイルの選択機能が追加されています。

1)最初の入力ボックス:検索する内容を入力;

2)2 番目の入力ボックス:置換後の内容を入力;

3)3 番目の入力ボックス:バッチ処理するファイルのパスを入力。注意、*.docは処理するフォルダ内のすべての.docファイルを示し、*.doc**.docsファイルも処理します。

PS:正規表現のマッチングもサポートしており、「Use Pattern Matching」をチェックすることを忘れないでください;フォルダ内のサブフォルダの文書も置換する必要がある場合は、「Search Subdirectories」をチェックすることを忘れないでください。

使用手順

⚠️:使用する前に必ずバックアップを取ってください、バックアップを取ってください、バックアップを取ってください。

1)http://www.funduc.com/word_sr.htmのウェブページにアクセスし、ソフトウェアの圧縮パッケージをダウンロードします。

image

2)解凍後、以下の図のように、WordSR_240_64bit.docm ファイルをダブルクリックして開きます(システムと Office のバージョンに応じて選択します。現在使用しているコンピュータは一般的に 64bit システムです)。

image

3)「Double Click Here To Run Word Search and Replace」テキストをダブルクリックします(Word がセキュリティ警告を表示した場合:マクロが無効になっています。最初に「コンテンツを有効にする」をクリックしてください)、それから楽しく使用できます~

image

注:上記の文書にも詳細な使用説明がありますので、理解できない場合は一度見てみてください;開発ツール > Visual Basic をクリックすることで、そのソースコードも確認できます。本質的には VBA です。

さて😊、このサードパーティツールを使って、私は女性弁護士の大部分の置換作業を完了しましたが、特定のテキストに太字や下線を追加するなどのカスタマイズされた要件が残っています。どうすれば実現できるのでしょうか?自分でやって、豊かに食べましょう

カスタマイズ機能#

カスタマイズされた要件は:1)フォーマット付きのテキスト置換;2)最後のページの削除;3)文末に内容を追加

0)バッチ処理#

まず、これらの要件を実現するために最も重要なのはバッチ処理の能力、つまりフォルダをループして処理する能力⭐️です。

コードは以下の通りです:(コードにはいくつかの注釈を追加しており、理解しやすく、必要に応じて修正しやすくしています。)

Sub フォルダをループ処理()
'
' フォルダをループ処理するマクロ
'
'
    On Error Resume Next 'マクロ内で「実行時エラー」が発生した場合、プログラムは中断せずに続行します

    'Dimで変数を宣言し、Asの後に型を指定します。指定しない場合は、デフォルトでVariant型になります
    '$はAs Stringの省略形、&はAs Longの省略形です
    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はオブジェクト参照を割り当てるために使用されます
    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は1回だけ置換
    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) 開発ツール > マクロをクリック > マクロ名を入力 > 作成をクリック;

image

b)開いた VBA エディタに上記の 4 つのコードをコピーします;

image

c)カーソルを「フォルダをループ処理」マクロに移動し、F5 を押して実行します。フォルダ選択ウィンドウがポップアップし、フォルダを選択すると、その中の各ファイルが適切に処理されます!

image

ヒント#

  • マクロの実行を強制停止する:Ctrl + break。
  • VBA の使い方が不明な場合は、まずMicrosoft 技術文書: Word VBA 参考で答えを探してみてください!
  • VScode には VSCode VBA というプラグインがあり、これを使って VBA を書くとより見栄えが良くなります~

どうですか?本当に Word 兄の遊び心を感じましたか?

Microsoft、尊敬します!


これで、彼女も早々にタスクを完了し、私たちは一緒に楽しくハイキングに行きました。この投稿のカバーも今回のタスクの報酬の一つです👀~

image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。