【エクセルVBA】フォルダ内のファイル名をすべて取得

VBA

※本サイトはアフィリエイト広告を利用しています。

今関わっているお仕事で、フォルダ内に入ってるPDFファイルの名前を取得したいという状況が発生したのでVBAで作ってみました。
5~6個ならまだしも、100個もファイルがあったら心が折れます(笑)
そういう繰り返しのお仕事、事務職してるとよくありますよね。従業員全員分のファイルから必要なデータを引っ張ってくるとか^^;

この記事の最後にサンプルコードが入ったエクセル&名前取得用のcsvファイルが入ったフォルダがダウンロードできるリンクがありますので、自分でコードを実行してみたい場合はダウンロードしてみてください。

サンプルコード(Do Loop)

かなり短いコードなのでサクッとご紹介。
※サンプルコードでは、PDFではなくCSVファイルのファイル名を取ってきてます。PDFの名前を取得したい場合は、拡張子を.pdfに変更してください。

Sub GetFileName()

  Dim FileName As String
  Dim Path As String
  Dim i As Long
  
  '  このファイルがあるフォルダのパスを取得
  Path = ThisWorkbook.Path
      
  'CSVファイルだけを取ってくる
  FileName = Dir(Path & "\ファイル\" & "*.csv")
  
  'ファイル名を各行の初期値を設定
  i = 2
  
  '該当するファイルが無くなるまでループ
  Do While FileName <> ""
      
      'ファイル名をセルに入力
      Cells(i, 1) = FileName
      
      '次のファイルを取得
      FileName = Dir()

      'iをカウントアップ
      i = i + 1

  Loop
End Sub

パスの指定

Dir関数というもので、フォルダ内に入ってるファイルの名前を取得しています。
FileName = Dir(Path & “\ファイル\” & “*.csv”)
という部分ですね。
Path & “\ファイル\” & “*.csv”でこのコードを書いたファイルの入ったフォルダの中にあるファイルというフォルダの中にあるCSVファイルを取得する、という意味になります。(長くて何を書いてるかわけかわかんないですね^^;
C:\Users\Documents\VBAfile\ファイル\” & “*.csv”のようにパスを指定することもできるのですが、
このファイルがあるフォルダのパスを取得
Path = ThisWorkbook.Path

という方法でパスを指定することで、別のフォルダに移動した時にわざわざコードを書き直す必要がないというメリットがあります。なので私はPath = ThisWorkbook.Pathをよく使ってます。

Dir関数

Dir関数というもので、フォルダ内に入ってるファイルの名前を取得しています。
FileName = Dir(Path & “\ファイル\” & “*.csv”)
と先ほど書きましたが、この書き方でファイル名を取ってこれます。以上!
そして、
‘次のファイルを取得
FileName = Dir()

のように引数を指定しなければフォルダに入ってる別のファイル名を取ってきます。
これをDo Loopで繰り返せば全部のファイル名が取得できるという感じです。

繰り返しはFor文を使うことが多いですが、For文は開始と終了の数を指定しなければいけないので、繰り返しの回数がわからない時はDo Loopが便利です。
とはいえ、勉強し始めで使い分けが難しい場合は正直For文で代用しても問題ないかな、と思ってます。
動けば問題ないので!
ご参考までにFor文バージョンも載せておきます。

サンプルコード(For文)

Sub GetFileName2()
  Dim FileName As String
  Dim Path As String
  Dim i As Long

    
  '  このファイルがあるフォルダのパスを取得
  Path = ThisWorkbook.Path
      
  'CSVファイルだけを取ってくる
  FileName = Dir(Path & "\ファイル\" & "*.csv")
    
  For i = 2 To 1000
      '該当するファイルが無くなったらFor文を抜ける
      If FileName = "" Then Exit For
      
      'ファイル名をセルに入力
      Cells(i, 1) = FileName
      
      '次のファイルを取得
      FileName = Dir()

      'iをカウントアップ
      i = i + 1

  Next i
End Sub

今回はフォルダ内のファイル名を取得する方法を紹介しました。
このコードをちょっと改変するとフォルダ内に入ってるファイルのデータをコピペできたりします。冒頭に書いた、

そういう繰り返しのお仕事、事務職してるとよくありますよね。従業員全員分のファイルから必要なデータを引っ張ってくるとか^^;

っていう事態に対応できます。
別記事にありますのでよかったらそちらもご参照ください。

【エクセルVBA】フォルダ内の全ファイルのデータを取り出す

解説動画

コードの解説を動画でもしています。今回はコード短いので超サックリです!

フォルダ内のファイル名一覧を取得

この記事がどなたかの参考になれば嬉しいです。

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡お願いします。

お問い合わせフォーム
自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから、VBAを一から作成して納品であれば3万円ほどから承ります。

ダウンロード

ファイルのダウンロードはこちらからどうぞ(^^)/

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

VBA
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

タイトルとURLをコピーしました