今日は、クライアントさんからの質問を取り上げます。
その質問とは、
「あるフォルダの中にあるファイル名を全部取得したいのですが、
エクセルで、そんな事は出来ますか?」
というものです。
エクセルの上で動作しているVBAというプログラミング言語は、なかなか立派なものです。
エクセル特有の操作はもちろん、エクセルに関係ないような機能もカバーしています。
今回のような、いわゆるファイル操作に関しても、ちゃんと対応しているのです。
例として、パス(ファイルやフォルダのコンピュータ内での住所のこと)を
Iドライブの「ワード資料」というフォルダということにして、そのフォルダ内のファイル一覧を取得してみます。
ちなみに、上記のパスは、「I:\ワード資料」 と書きます。
それでは、さっそく、VBAでコーディングしてみましょう。
エクセルを起動したら、Altキーを押しながらF11キーを押します。
すると、Visual Basic Editorが起動します。
コードを記述するモジュールが必要なので、「挿入」→「標準モジュール」とクリックします。

これで、用意ができました。
おっと、大事なことを忘れていました。
今回のように、ファイル操作を扱うときは、「ファイルシステムオブジェクト」を使うと便利です。
ところが、この機能は、初期設定では使用できるようになっていません。
ですから、まず、この機能を使えるようにすることが必要なのです。
具体的には、次のようにします。
「ツール」→「参照設定」とクリックします。

参照設定ダイアログボックスが表示されたら、一覧を下にスクロールして、「Microsoft Scripting Runtime」に
チェックを入れてください。
そして、OKボタンを押します。
これで、「ファイルシステムオブジェクト」を使用する準備ができました。
この作業が大切ですので、忘れずにお願いします。

それでは、コードを記述しましょう。
---------------------------------------------------
---------------------------------------------------
画像も載せておきます。

今回は、サブルーチンを使用してみました。
プログラムの中で、別のプログラムを呼び出すのです。
subで始まるプロシージャが2つあることにお気づきでしょうか。
ひとつのプロシージャがとても長くなってしまうことがあります。
そんなときは、処理のまとまりごとにプロシージャを作成して、それを呼び出します。
そのほうが、分かりやすいし、使い回しがきくものです。ここら辺の感覚は、コードを書いていくと自然と身に付きます。
今回のサブルーチンは、引数(パラメータ)を持っています。
慣れてくると、大変便利な記述法ですよ。
つまり、パスを引数として与えてあげれば、とにかく、そのパスの中のファイル一覧を取得できるのです。
融通がきくんですよ。
書き方としては、プロシージャ名のあとに半角スペースを入れて、パラメータを書きます。シンプルですね。
今回は、引数に "I:\ワード資料" というパスを指定していますが、
この部分を自分のパソコンの任意のパスに変更すれば、それだけで、そのパスのファイル一覧を取得することができます。
処理の内容としては、繰り返し処理で、ファイルシステムオブジェクトを使って取得したファイル群を
ひとつずつ取り出して、ファイル名をA列に書き込んでいるのです。
それでは、エクセルに切り替えて、実行してみましょう。
Altキーを押しながらF8キーを押します。
マクロダイアログボックスが表示されます。
実行ボタンを押してみます。

実行すると、シートのA列に、ファイル名が表示されます。
エクセルでも、こんなことができるんですよ。

もし、指定したパスにあるファイルのうち、エクセルファイルだけを取得したければ、
ファイル名の拡張子が、.xls という条件を追加すればよいでしょう。
(エクセル2007ファイルも取得したければ、.xlsx も条件に入れてください)
さて、次回は、取得したエクセルファイルを逐一開いて、ある処理をするというケースを取り上げます。
お楽しみに。
だい
その質問とは、
「あるフォルダの中にあるファイル名を全部取得したいのですが、
エクセルで、そんな事は出来ますか?」
というものです。
エクセルの上で動作している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 も条件に入れてください)
さて、次回は、取得したエクセルファイルを逐一開いて、ある処理をするというケースを取り上げます。
お楽しみに。
だい

やっぱりできるんですね~!
そのときはひたすらコピペした気がします;;
VBスクリプトやJスクリプトでテキストに吐かせて使っていた事もあります。
この方法だと、テキストをエクセルに取り込む必要がないので、便利ですね(^^)
今後も、役に立つ情報をご提供できればと思っています。
これからもよろしくお願い申し上げます。
できるということがすばらしいですね。
これからもよろしくお願い申し上げます。