今日は、クライアントさんからの質問を取り上げます。
その質問とは、
「あるフォルダの中にあるファイル名を全部取得したいのですが、
エクセルで、そんな事は出来ますか?」
というものです。
エクセルの上で動作しているVBAというプログラミング言語は、なかなか立派なものです。
エクセル特有の操作はもちろん、エクセルに関係ないような機能もカバーしています。
今回のような、いわゆるファイル操作に関しても、ちゃんと対応しているのです。
例として、パス(ファイルやフォルダのコンピュータ内での住所のこと)を
Iドライブの「ワード資料」というフォルダということにして、そのフォルダ内のファイル一覧を取得してみます。
ちなみに、上記のパスは、「I:\ワード資料」 と書きます。
それでは、さっそく、VBAでコーディングしてみましょう。
エクセルを起動したら、Altキーを押しながらF11キーを押します。
すると、Visual Basic Editorが起動します。
コードを記述するモジュールが必要なので、「挿入」→「標準モジュール」とクリックします。
これで、用意ができました。
おっと、大事なことを忘れていました。
今回のように、ファイル操作を扱うときは、「ファイルシステムオブジェクト」を使うと便利です。
ところが、この機能は、初期設定では使用できるようになっていません。
ですから、まず、この機能を使えるようにすることが必要なのです。
具体的には、次のようにします。
「ツール」→「参照設定」とクリックします。
参照設定ダイアログボックスが表示されたら、一覧を下にスクロールして、「Microsoft Scripting Runtime」に
チェックを入れてください。
そして、OKボタンを押します。
これで、「ファイルシステムオブジェクト」を使用する準備ができました。
この作業が大切ですので、忘れずにお願いします。
それでは、コードを記述しましょう。
---------------------------------------------------
Sub ファイルの取得()
'サブルーチンを使って、
'指定したフォルダの中のファイル名を取得
Dim MyPath As String
'変数に、フォルダのパスを代入
MyPath = "I:\ワード資料"
'サブルーチンの呼び出し
GetFiles MyPath
End Sub
Private Sub GetFiles(FolderPath As String)
'引数付のサブルーチン
'引数は、フォルダーのパス
Dim FSO As New FileSystemObject
Dim Files As Files
Dim File As File
'まず、フォルダのパスをA列1行目に書く
Range("A1").Value = FolderPath
'引数で指定されたフォルダの中のファイル一覧を取得
Set Files = FSO.GetFolder(FolderPath).Files
'ファイル一覧から順次ファイル名を取得し、A列に書き出す
For Each File In Files
Range("A65536").End(xlUp).Offset(1).Value = File.Name
Next
End Sub
---------------------------------------------------
画像も載せておきます。
今回は、サブルーチンを使用してみました。
プログラムの中で、別のプログラムを呼び出すのです。
subで始まるプロシージャが2つあることにお気づきでしょうか。
ひとつのプロシージャがとても長くなってしまうことがあります。
そんなときは、処理のまとまりごとにプロシージャを作成して、それを呼び出します。
そのほうが、分かりやすいし、使い回しがきくものです。ここら辺の感覚は、コードを書いていくと自然と身に付きます。
今回のサブルーチンは、引数(パラメータ)を持っています。
慣れてくると、大変便利な記述法ですよ。
つまり、パスを引数として与えてあげれば、とにかく、そのパスの中のファイル一覧を取得できるのです。
融通がきくんですよ。
書き方としては、プロシージャ名のあとに半角スペースを入れて、パラメータを書きます。シンプルですね。
今回は、引数に "I:\ワード資料" というパスを指定していますが、
この部分を自分のパソコンの任意のパスに変更すれば、それだけで、そのパスのファイル一覧を取得することができます。
処理の内容としては、繰り返し処理で、ファイルシステムオブジェクトを使って取得したファイル群を
ひとつずつ取り出して、ファイル名をA列に書き込んでいるのです。
それでは、エクセルに切り替えて、実行してみましょう。
Altキーを押しながらF8キーを押します。
マクロダイアログボックスが表示されます。
実行ボタンを押してみます。
実行すると、シートのA列に、ファイル名が表示されます。
エクセルでも、こんなことができるんですよ。
もし、指定したパスにあるファイルのうち、エクセルファイルだけを取得したければ、
ファイル名の拡張子が、.xls という条件を追加すればよいでしょう。
(エクセル2007ファイルも取得したければ、.xlsx も条件に入れてください)
さて、次回は、取得したエクセルファイルを逐一開いて、ある処理をするというケースを取り上げます。
お楽しみに。
だい