【コピペでOK】フォルダ内のファイルに同じ処理をする方法!【file system object】
こんにちは!『ルウちゃんのExcel Labo』管理人の@rouxchanblogです!
今回はこのような悩みについて解説します。
フォルダ内のファイル全てに処理をしたい!
どうやってやるのか教えて!
- フォルダ内全てに同じ処理をする方法
- 「file system object」の使い方
- オブジェクト指向の基本的な考え方
はじめに
フォルダ内のファイル全てに処理をする時は「file system object」と「繰り返し処理」の組み合わせがおすすめです!
早速サンプルコードと実行画面を見ながら動きを確認していきましょう!
Sub ファイル一括処理()
Dim path, fso, file, files '変数「path」,「fos」,「file」,「files」を定義
path = "C:\Users\Desktop\テスト" '絶対パスを参照する
Set fso = CreateObject("Scripting.FileSystemObject") 'インスタンスを作成
Set files = fso.GetFolder(path).files '指定したパスの中にあるファイルのFolderオブジェクトを変数「files」に格納する
For Each file In files 'フォルダ内の全ファイルについて繰り返し処理
Dim wb As Workbook '変数「wb」を定義
Set wb = Workbooks.Open(file) 'ファイルを開いて、変数「wb」に格納
'----------ブックに対する処理--------------
Range("A1").Value = "こんにちは"
'----------ブックに対する処理--------------
Call wb.Close(SaveChanges:=True) 'ブックを保存して閉じる
Next file
End Sub
基本的にコピペで使えるようにしています!
参照パスと実行する処理だけは書き換えてください!
この2つのファイルに同じ処理を実行していきます!
このように2つのファイルに「こんにちは」と入力することができました!
↓「dir関数」を使った方法はこちら↓
コード解説
概要
「file system object」はフォルダやファイルを操作することができるオブジェクトです。
メリットとしてはVBAで用意されている「dir関数」を使うよりもスッキリした記述ができ、後から見てもわかりやすい点です。
デメリットとしては機能が多いため、どのように記述すればいいのか分かりにくく、難易度が上がってしまう点ですね。
今回はサンプルコードを噛み砕いて解説していますので1つずつ理解していきましょう!
コーディングの準備
準備として参照設定をしておきましょう。
参照設定をするとコーディング時に使える機能が拡張されるのでおすすめです。
以下の手順で設定してください。
インスタンスの作成
インスタンスってなに?
インスタンスの作成って聞いてもなにそれ?って方が、大半だと思います。
身近な例に例えると、Excelを使うには「Excelのアプリケーションを立ち上げる」→「Excelを使う」のようにまずはアプリケーションを立ち上げる必要がありますよね。
これと同じイメージで「file system object」を使うためにはまずインスタンスを作成しなければいけません。
次に具体的な作成方法を解説します。
レイトバインディング
この方法は変数を宣言し、「CreateObject関数」を使ってインスタンスを作る方法です。
Dim fso As Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemOject")
変数の型は「Scripting.FilesystemObject」にしましょう。
コーディングの準備で参照設定をしておくことで使えるようになります。
参照設定をしていると入力補完やコンパイルチェックをしてくれるメリットがあります。
今回使っているサンプルコードもこちらの記述方法を使用しています。
- 入力補完
-
使えるメソッドなどの候補が出てくる
- コンパイルチェック
-
コンパイルエラー時にメッセージを出してくれる
アーリーバインディング
こちらは変数宣言と同時にインスタンスを作る方法です。
Dim fso As New Scripting.FileSystemOject
参照設定などが必要ない方はこちらの方がコードをすっきりすることができます。
フォルダ内の全てのファイルを取得する
ここからが「FilesystemObject」でできる機能になります!
まずは「FilesystemObject」に対して、「GetFolderメソッド」を使いフォルダを取得します。
次に取得したフォルダに対して、「fileメソッド」を使い、フォルダ内の全てのファイルを取得します。
ずらずらっと書きましたが、やっている内容はいたって簡単です!
参照したパスからフォルダに入り、フォルダからファイルを見つけてくるという処理です!
オブジェクト.メソッドの形を思い出しながら理解していってください!
ファイルを1つずつ開いて処理を実行する
次はファイルに処理をさせていきます。
Excelのファイルに処理を実行させる時は一旦ファイルを開く必要があります。
自分の手でExcelを使うときもファイルを開いてから、文字を入力したりしますよね。
その動きと全く同じです。
VBAでは「workbooksオブジェクト」に「Openメソッド」を使うことでファイルを開くことができます。
この処理を「For Each」で繰り返すことで全てのファイルに処理を行うことができるのです。
保存して閉じる
最後に処理を保存してファイルを閉じる必要があります。
「Workbook.Close」でファイルを閉じることができます。
引数には「SaveChanges:=True」と記述してください。
変更内容が保存されます。
まとめ
今回は「file system object」を使ってフォルダ内のファイル全てに処理をしていく内容を解説しました。
機能がたくさんあり、少し難しかったからもしれませんが実務で生かせる内容なので時間をかけて学んでいってください!
もし今回の記事でもわかりにくかった場合は下記の記事も参考にしてみてください!
この記事で少しでも皆さんのお役に立てれば幸いです!
忘れないうちにお気に入り登録もお願いします!
ありがとうございました!
コメントはお気軽に!