ExcelマクロVBAサンプル集
Dir関数で全サブフォルダの全ファイルを取得

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2013-09-05

Dir関数で全サブフォルダの全ファイルを取得


指定フォルダ以下の全サブフォルダ内の全ファイルを取得する場合、


通常はFileSystemObjectの再帰モジュールで実現しますが、これをDir関数だけでやってみましょう。

FileSystemObjectの再帰モジュールについては、

エクセルでファイル一覧を作成

こちらをご覧ください。



Sub sample()
  Dim i As Long
  Dim aryDir() As String
  Dim aryFile() As String
  Dim strName As String
  
  i = 0
  ReDim aryDir(i)
  aryDir(i) = ThisWorkbook.Path 'フォルダをここで指定
  'まずは、指定フォルダ以下の全サブフォルダを取得し、配列aryDirに入れます。
  Do
    strName = Dir(aryDir(i) & "\", vbDirectory)
    Do While strName <> ""
      If GetAttr(aryDir(i) & "\" & strName) And vbDirectory Then
        If strName <> "." And strName <> ".." Then
          ReDim Preserve aryDir(UBound(aryDir) + 1)
          aryDir(UBound(aryDir)) = aryDir(i) & "\" & strName
        End If
      End If
      strName = Dir()
    Loop
    i = i + 1
    If i > UBound(aryDir) Then
      Exit Do
    End If
  Loop
  
  '配列aryDirの全フォルダについて、ファイルを取得し、配列aryFileに入れます。
  ReDim aryFile(0)
  For i = 0 To UBound(aryDir)
    strName = Dir(aryDir(i) & "\", vbNormal + vbHidden + vbReadOnly + vbSystem)
    Do While strName <> ""
      If aryFile(0) <> "" Then
        ReDim Preserve aryFile(UBound(aryFile) + 1)
      End If
      aryFile(UBound(aryFile)) = aryDir(i) & "\" & strName
      '実行結果が分かりやすいように、テスト的にセルに書き出す場合
      'Cells(UBound(aryFile) + 1, 1) = aryFile(UBound(aryFile))
      strName = Dir()
    Loop
  Next
End Sub



上記では、ThisWorkbook.Path以下にある、全サブフォルダが、配列aryDirに入ります。


aryDir(0)には、最初の指定フォルダを入れています。

これは、その後の処理を書きやすくする為と、指定フォルダ直下のファイルも一緒に取得する為に入れています。


全サブフォルダが、配列aryDirに入ッた後は、配列aryDirに入っているフォルダを一つずつ処理し、

全ファイルを、配列aryFileに取得しています。

vbNormal + vbHidden + vbReadOnly + vbSystem

この指定は、通常のファイルだけが対象なら、指定の必要はありません。


この例では、フォルダもファイルも、配列に入れているだけですが、

実務としては、それぞれのファイルに対する何らかの処理を記述する事になると思います。

配列aryFileにフルパスのファイル名が入っていますので、その後の処理は書き易いはずです。


しかし、やはりFileSystemObjectの再帰モジュールに比べると、かなり無理やり感は否めません。

それでも、FileSystemObjectを何らかの理由で使いたくない場合には、参考になると思います。

また、配列の使い方と、ロジックの組み立てについては、大いに参考になると思います。



同じテーマ「マクロVBAサンプル集」の記事

1次元配列の並べ替え(バブルソート,クイックソート)
2次元配列の並べ替え(バブルソート,クイックソート)
Dir関数で全サブフォルダの全ファイルを取得
順列の全組み合わせ作成と応用方法


新着記事NEW ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • Dir関数で全サブフォルダの全ファイルを取得

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ