Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excel VBA スキルアップコレクション Topics  >     (20) フォルダ内に存在するファイルの一覧を作成する

 
(20) フォルダ内に存在するファイルの一覧を作成する

 フォルダ内に存在するファイルの一覧を作成する方法を紹介します。

 Dir() 関数を紹介します。
Dir(パス条件式)ファイル名を表す条件式を{パス条件式}に指定してDir()関数を呼び出せば、 条件に見合うファイルの中で、最初に見つかったファイル名が戻り値として返り ます。条件に見合うファイルが存在しない場合は空文字が返ります。条件に見合 うファイルが複数存在する場合で、二番目以降のファイル名を得るには、Dir() 関数の{パス条件式}を省略して呼び出します。返される値が空文字になるまでそ れを繰り返すことで、ファイル一覧を作成することができます。
 以下のようなフォルダ「C:\Sample」を対象に、ファイルの一覧を作成するサンプルを紹介します。
  
 下記サンプルコードは、Dir()関数を使用したサンプルです。

 1行目:  Public Sub make_FileList_01()
 2行目:  
 3行目:      ' 単純なループカウンタ
 4行目:      Dim lp As Long
 5行目:  
 6行目:      ' 「C:\Sample」フォルダ配下に存在するファイル名を取出す為の変数
 7行目:      Dim fileName As String
 8行目:      
 9行目:      ' 「C:\Sample」フォルダ配下に存在するファイル名を取出す。
10行目:      fileName = Dir("C:\Sample\*.*")
11行目:  
12行目:      ' ファイル名をシート上に出力する為のカウンタ
13行目:      Dim cnt As Long
14行目:      cnt = 0
15行目:  
16行目:      Do While fileName <> vbNullString
17行目:          ' ファイル名をシート上に出力する。
18行目:          Range("A1").Offset(cnt, 0).Value = fileName
19行目:          cnt = cnt + 1
20行目:          fileName = Dir()
21行目:      Loop
22行目:  
23行目:  End Sub
 このサンプルコードを実行すると、以下の結果になります。
<実行前>

<実行後>

 10行目のDir()関数の引数は、パス名ではなくパス条件式です。フォルダ「C:\Sample」配下にて、ファイル名にピリオド「"."」を含むものを条件にしています。検索対象をExcelファイルに限定したい場合、パス条件式をExcelの拡張子「.xls」を意識したものに修正します。

…
10行目:      fileName = Dir("C:\Sample\*.xls")
…
 フォルダ内に存在するファイルの一覧を作成する方法として、Dir()関数を利用する方法以外に、FileSystemObjectを利用する方法もあります。
 下記サンプルコードは、FileSystemObjectを利用してファイルの一覧を作成するサンプルです。

 1行目:  Public Sub make_FileList_02()
 2行目:  
 3行目:      ' FileSystemObjectを作成する。
 4行目:      Dim Obj As Object
 5行目:      Set Obj = CreateObject("Scripting.FileSystemObject")
 6行目:  
 7行目:      ' ファイル名をシート上に出力する為のカウンタ
 8行目:      Dim cnt As Long
 9行目:      cnt = 0
10行目:  
11行目:      ' 「C:\Sample」フォルダ配下に存在するファイルを一つずつ参照する。
12行目:      Dim f As Object
13行目:      For Each f In Obj.Getfolder("C:\Sample").Files
14行目:          ' ファイル名をシート上に出力する。
15行目:          Range("A1").Offset(cnt, 0).Value = Obj.GetFile(f).Name
16行目:          cnt = cnt + 1
17行目:      Next f
18行目:      
19行目:      ' オブジェクトを破棄する。
20行目:      Set Obj = Nothing
21行目:      Set f = Nothing
22行目:  
23行目:  End Sub
 このサンプルコードを実行すると、以下の結果になります。
<実行前>

<実行後>

 サンプルコードの14行目の「.Name」を「.Path」に変更すると、シート上に出力されるファイル名は、フルパスになります。

…
14行目:      Range("A1").Offset(cnt, 0).Value = Obj.GetFile(f).Path
…
ページの先頭へ