Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法

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

複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてのシリーズ、第二回目です。

前回の記事はコチラ。

Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
Wordドキュメントについて一括で処理をするWordマクロを作る場合に必須となるテクニックとして、Word VBAでドキュメントを開くOpenメソッドの使い方、閉じるCloseメソッドの使い方についてお伝えします。

ドキュメントファイルを開く方法と閉じる方法についてお伝えしました。

今回ですが、もう一括処理、進めちゃいます。

Word VBAでフォルダ内のドキュメント全てを順番に開いて操作をする方法です。

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

スポンサーリンク

FileSystemオブジェクトとは

さて、今回は「フォルダ内にある全てのドキュメント」を操作していきたいわけですから、フォルダの操作が必要になります。

そして、VBAでフォルダやファイル、またはドライブなどを操作するときには、FileSystemオブジェクトと呼ばれるオブジェクトを使います。

FileSystemオブジェクトの生成と破棄

まず、FileSystemオブジェクトを使う場合は以下命令によってFileSystemオブジェクトを生成してオブジェクト変数にセットする必要があります。

Set 変数 = CreateObject(“Scripting.FileSystemObject”)

また、FileSystemオブジェクトを使い終わった際には、以下のようにして、生成したオブジェクトを破棄します。

Set 変数 = Nothing

ですから、一般的にFileSystemオブジェクトを使うプロシージャは以下のような構成になります。

Sub openDocs()

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

'処理

Set objFso = Nothing

End Sub

これで、objFsoという名称でFileSystemオブジェクトを生成し、何らかの操作をした上で破棄するという流れができました。

指定したフォルダ内のファイルを参照する

では、FileSystemオブジェクトを使って、フォルダ内のファイルを参照する方法を見ていきましょう。

getFolderメソッドでフォルダを取得する

フォルダを取得するにはgetFolderメソッドを使います。

フォルダを取得する場合は、フォルダのフルパスを指定して、以下のように書きます。

FileSystemオブジェクト.getFolder(フォルダパス)

例えば、以下のプロシージャを実行してみますと、現在マクロを記述しているドキュメントが保存されているフォルダのフォルダ名が表示されます。

Sub openDocs()

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

Debug.Print objFso.getFolder(ThisDocument.Path).Name

Set objFso = Nothing

End Sub

Nameプロパティですが、フォルダ名を知ることができます。

Folderオブジェクト.Name

Filesプロパティでファイルをコレクションとして取得する

続いて、Filesプロパティを使ってフォルダ内のファイルをコレクションとして取得します。

Folderオブジェクト.Files

これで、指定したFolderオブジェクトのFilesコレクションを取得できます。

For Each~Next文でフォルダ内のファイルを一つ一つ操作する

こうして取得したFilesコレクションの要素であるFileオブジェクト一つ一つに対して処理を行っていきたいのですが、そのようなときに便利な繰り返し構文、For Each~Next文があります。

以下のように書きます。

For Each 変数 In コレクション
 ’処理
Next 変数

毎回の繰り返しでコレクションの要素一つ一つを取り出して変数に格納した上でブロック内の処理を行います。そして、コレクション内のすべての要素に対して処理を終えると、繰り返しから抜けるというものです。

これ、すごく便利なので、ぜひ覚えておいてくださいね。

フォルダ内のドキュメント名を出力する

マクロが存在しているフォルダ内に「原稿」というフォルダがありまして、その中身は以下のようになっています。

Word VBAで操作するフォルダ

テストとして、このフォルダ内のドキュメントを開いて、ドキュメント名を出力して、閉じるというプロシージャを作ってみましょう。

Sub openDocs()

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

Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    With Documents.Open(strPath & "\" & obj.Name)
        Debug.Print .Name
        .Close
    End With

Next obj

Set objFso = Nothing

End Sub

これを実行すると、以下のようにドキュメント名がイミディエイトウィンドウに出力されます。

Word VBAでフォルダ内のドキュメント名を出力

Nameプロパティでファイル名を取得する

Openメソッドでドキュメントを開く際にファイル名が必要になりますが、ファイル名はFileオブジェクトのNameプロパティで取得できます。

Fileオブジェクト.Name

ドキュメント名=ファイル名を取得するだけなら、わざわざOpenメソッドで開く必要はないのですが、何かWordマクロならではの処理を加えるのであれば、開く必要が出てきますね。

まとめ

Word VBAでフォルダ内の全てのドキュメントを順番に操作する方法についてお伝えしました。

  • FileSystemオブジェクトでフォルダとそのFilesコレクションをつかむ
  • For Each~Next文でその要素であるファイル一つ一つについて繰り返し処理をする

この二つが、今後ずーっとお世話になる重要なテクニックになりますので、ぜひマスター下さいませ。

では次回、実際に開いたファイルについて色々な処理をしていきたいと思います。

Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
Word VBAで複数のドキュメントに一括処理をする方法についてお伝えしています。今回はWord VBAでフォルダ内の全てのドキュメントについて、その全体範囲のフォントを変更する方法です。

どうぞお楽しみに!

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
  3. Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
  4. Word VBAでドキュメントファイルを上書き保存する2つの方法
  5. Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法
タイトルとURLをコピーしました