エクセルVBAでWord文書を開いてページ数や文字数などのいろんな情報を取得する


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

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

前回はこちらの記事。

エクセルVBAでWordを操作して文書を操作する準備と最も簡単なプログラム
エクセルVBAでWord文書を操作する方法について、最初の一歩からお伝えするということで、まずはエクセルVBAでWord文書を操作するために必要な準備と、最も簡単なプログラムについてお伝えします。

エクセルVBAでWordアプリケーションを起動する準備とその方法についてお伝えしました。

今回は、起動したWordアプリケーション上にWord文書を開いて、ページ数や文字数などのいろいろな情報を取得してみたいと思います。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

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

Sub Wordを立ち上げる()

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

MsgBox "Wordが立ち上がりました"

wdApp.Visible = False
Set wdApp = Nothing

End Sub

Wordアプリケーションのオブジェクトを生成して、表示して、閉じて、破棄するというだけのプログラムです。

これだけでは何の意味もありませんが、このプログラムをベースとして、7行目のMsgBox関数の代わりに、いろいろな処理を入れていけばよろしいということになります。

エクセルVBAでWord文書を開く

では、Word文書を開いていきましょう。

Word文書を開くには、DocumentsコレクションのOpenメソッドを使います。

それで、開いたWord文書を変数にセットして扱いたいので、以下のようにSetステートメントでセットします。

Set 変数 = Documentsコレクション.Open(ファイル名)

ファイル名はフルパスで指定する必要があります。

で、Documentsコレクションはどうやって取得するかというと、Word.ApplicationオブジェクトのDocumentsプロパティで取得できます。

Wordアプリケーションオブジェクト.Documentsプロパティ

Word文書を開くプログラム

例えば、現在のエクセルマクロを記述しているファイルと同階層の、「原稿(1章).docx」という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")

Stop

wdApp.Visible = False
Set wdApp = Nothing

End Sub

7~10行目が今回追加した部分ですね。

実行すると、Stopステートメントで中断しているところで、以下のようにWord文書が開きます。

エクセルVBAでWord文書を開く

Word文書の情報を取得する

では、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

実行すると、以下のように各情報を取得することができます。

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

以下、解説をしていきますね。

Word文書のページ数を取得する

まず、ページ数ですが、これは実はちょっとわかりづらいです。

Word文書のページ数を取得するには、WordのRangeオブジェクト(またはSelectionオブジェクト)のInformationプロパティという、指定した範囲の情報を取得するプロパティを使います。

Rangeオブジェクト.Information(Type)

Typeに指定する定数で色々な情報を取得できるのですが、今回は文書のページ数なので「wdNumberOfPagesInDocument」を指定すればOKです。

総ページ数は、RangeオブジェクトよりもDocumentオブジェクトから取得できるのが自然かなぁと思うのですが、そうはなっていないみたいですね。

Word文書の段落数、文数、単語数、文字数を調べる

続いて、Word文書の段落数、文数、単語数、文字数を調べます。

Wordでは、これらの要素は全てオブジェクトとして存在していまして、Documentオブジェクトから、それぞれ対応したコレクションを取得するプロパティがあります。

Documentオブジェクト.Paragraphsプロパティ
Documentオブジェクト.Sentencesプロパティ
Documentオブジェクト.Wordsプロパティ
Documentオブジェクト.Charactersプロパティ

これらのコレクションを取得して、その要素数をCountプロパティでカウントすればOKということになりますね。

ちなみに、日本語の文書の場合、単語数はあまり正確ではないようですので、参考としてどうぞ。

まとめ

以上、エクセルVBAでWord文書を開いて、ページ数、段落数、文数、単語数、文字数を調べる方法をお伝えしました。

今回は一つのWord文書だけでしたが、大量のWord文書について繰り返しを回せば一気に「文書リスト」ができますよね。

次回、その文書リストを作成していきますよ。

エクセルVBAでフォルダ内のWord文書のページ数・文字数などをリスト化する
エクセルVBAでWord文書の操作をする方法についてお伝えしています。今回は、エクセルVBAでフォルダ内のWord文書のページ数や文字数などの各情報を取得してリスト化するプログラムを作っていきます。

どうぞお楽しみに!

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

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

コメント

  1. 影本 賢治 より:

    ある書籍の翻訳を行っているのですが、索引を作成するために、このサイトの情報が非常に役に立ちました。自分のサイトでも紹介させていただきます。

  2. 私の環境だけかもしれませんが「Word文書の情報を取得する」を保存後に使用すると「実行エラー91」が発生しました。

    コード8行目
    「Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & “F:/個人/黒姫の魔道書/黒姫の魔導書5.docx”)」

    の「ThisWorkbook.Path &」を削除と保存後も使用できるのですが・・・
    私が選択したファイルが影響してるだけなのかな?

     後、コード12行目の「段落数の取得」を変数に入れて使いたいたく変数宣言をしてそれに入れたりしたのですがうまくいきません。よければ教えてもらえないでしょうか?

    • スパイダーマッ!!さん

      コメントありがとうございます!
      見た感じ、対象のWordドキュメントファイルのパスはFドライブ直下なので、おっしゃる通り「ThisWorkbook.Path &」は不要ですね。
      「ThisWorkbook.Path &」をつける場合は、実行するマクロを仕込んでいるエクセルファイルと同じフォルダに、対象のドキュメントが含まれているときに使うという感じです。

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