エクセルVBAでフォルダ内のWord文書のページ数・文字数などをリスト化する


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでWord文書の操作をする方法についてお伝えしています。

前回の記事はコチラ。

エクセルVBAでWord文書を開いてページ数や文字数などのいろんな情報を取得する
エクセルVBAでWord文書を操作する方法についてシリーズでお伝えしております。今回は、起動したWordアプリケーション上にWord文書を開いて、ページ数や文字数などのいろいろな情報を取得します。

エクセルVBAでWord文書を開いてページ数や文字数などの色々な情報を取得する方法をお伝えしました。

今回は、このプログラムを応用して、エクセルVBAでフォルダ内のWord文書の各種情報を取得してリスト化するプログラムを作っていきます。

では、行ってみましょう

前回のおさらい

前回作成したプログラムはこちらです。

Sub Word文書の情報を取得する()

Dim wdApp As Word.Application
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True

Dim wdDoc As Word.Document
Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\原稿(1章).docx")

With wdDoc
    Debug.Print "ページ数:" & .Content.Information(wdNumberOfPagesInDocument)
    Debug.Print "段落数:" & .Paragraphs.Count
    Debug.Print "文数:" & .Sentences.Count
    Debug.Print "単語数:" & .Words.Count
    Debug.Print "文字数:" & .Characters.Count
End With

wdApp.Visible = False
Set wdApp = Nothing

End Sub

「原稿(1章).docx」というファイルのページ数や段落数など色々な情報を取得するプログラムでした。

7行目~16行目までの処理を、フォルダ内のWord文書について繰り返すように改良をしていきたいと思います。

今回やりたいこと:フォルダ内のWord文書の情報をリスト化

まず、対象となるWord文書を以下フォルダに用意しています。

エクセルVBAで開くWord文書が保存されているフォルダ

現在マクロを記述しているエクセルファイルが「Book1.xlsm」で、情報を取得したいWord文書ファイルが「原稿」というフォルダ内にゴソっと入っているという前提です。

取得した情報について記載するシートは以下の通りです。

エクセルVBAでWord文書の情報を書き出すシート

2行目にSUM関数を仕込んでいて、合計値を算出できるようにしています。なお、このシートのオブジェクト名は「Sheet1」としています。

フォルダ内のWord文書の情報をリスト化するプログラム

では、実際のプログラムを紹介しましょう、

こちらです。

Sub フォルダ内のWord文書の情報を取得する()

Dim wdApp As Word.Application
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim path As String
path = ThisWorkbook.path & "\原稿"

Dim objFolder As Object
Set objFolder = objFso.GetFolder(path)

Dim i As Long
i = 3

Dim f As Object
For Each f In objFolder.Files
    With wdApp.Documents.Open(path & "\" & f.Name)
        Sheet1.Range(Sheet1.Cells(i, 1), Sheet1.Cells(i, 6)).Value = Array( _
            f.Name, _
            .Content.Information(wdNumberOfPagesInDocument), _
            .Paragraphs.Count, _
            .Sentences.Count, _
            .Words.Count, _
            .Characters.Count)
        i = i + 1
        .Close
    End With
Next f

wdApp.Visible = False
Set wdApp = Nothing

End Sub

これを実行すると、以下のようにフォルダ内に存在するすべてのWord文書についての情報をリスト化することができます。

エクセルVBAでWord文書の情報を取得

フォルダ内のファイル全てについて処理をする

まず、フォルダ内のファイルについて繰り返し処理をするには、FileSystemオブジェクトとFor Each~Next文を使うのが便利です。

プログラムでいうと

  • 7行目~8行目:objFsoとしてFileSystemオブジェクトの生成
  • 10行目~11行目:対象となるフォルダのパスを変数pathに取得
  • 13行目~14行目:対象となるフォルダをフォルダオブジェクトobjFolderとして取得
  • 20行目~32行目:For Each文でobjFolder内のファイル全てについて繰り返し

という部分です。

それぞれの命令について詳細は以下の記事をご覧ください。

【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法についてお伝えしています。今回は、FilesコレクションとそのFor Each文を使ってファイル一覧を出力する方法です。

WithステートメントとOpenメソッドの組み合わせ

21行目で、現在繰り返しの対象となっているWord文書を開き、それをWithステートメントの対象としてます。

WithステートメントとOpenメソッドの組み合わせの記述です。

With Documentsコレクション.Open(ファイル名)
 ’処理
End With

これにより、Withブロック内では開いたWord文書について、オブジェクト名を省略して記述できるようになります。

便利です。

Word文書の情報を取得

24行目~28行目は前回紹介した部分で、Word文書の各種情報を取得しています。

23行目は、見てわかりますが、Nameプロパティでファイル名を取得している部分です。上から順に、ページ数、段落数、文数、単語数、文字数を取得しています。

Fileオブジェクト.Name

まとめ

以上、エクセルVBAでフォルダ内のWord文書のページ数、文字数などをリスト化するプログラムを紹介しました。

Word文書がたくさんあったとしても、いちいち開いて確認する必要はありませんね。

どうぞご活用ください。

さて、次回はまた別の情報の取得の仕方について、紹介をしていきます。

どうぞお楽しみに!

連載目次:エクセルVBAでWord文書を操作する方法

Word文書についての情報を集めてリストを作りたい、そんなときはエクセルVBAでWord文書を開いたり、情報を取得したりしたいものです。シリーズでは初心者でもできる、エクセルVBAからのWord文書の操作の仕方をお伝えします。
  1. エクセルVBAでWordを操作して文書を操作する準備と最も簡単なプログラム
  2. エクセルVBAでWord文書を開いてページ数や文字数などのいろんな情報を取得する
  3. エクセルVBAでフォルダ内のWord文書のページ数・文字数などをリスト化する

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました