超簡単に出来ます。
保存フォルダにあるエクセルファイルでそのファイル名を自動で一度に取得して、一覧表にするVBAコードを紹介します。
操作方法はフォルダの選択でダイアログでクリック選択するだけです。
今回は、フォルダに保存されているファイル名をリスト化するエクセルVBAコードを紹介します。
ダイアログでフォルダを選択するだけで、そこにあるファイル名を一覧化表示できるというものです。
こんにちは、じゅんぱ店長(@junpa33)です。
コンテンツ
超簡単!エクセルファイル名をフォルダから
自動取得一覧化するコード
「エクセルVBAでフォルダに保存したファイルのファイル名を自動的にリスト化します。」
今回はこれがテーマです。
恐らく、皆さんはリスト化が最終目的ではなくて、そのリスト化をしてさらに何かをしたい、ということではないかなと思います。
そしてまた、その目的については、お読みいただいている方々個別いろいろだろうなと思います。
因みに、自分的には、リスト化のVBAコードが必要になったのは、
- 顧客別のある販売データを、月毎にエクセル1ファイルに纏めていましたが、ファイル内の特定の数値だけを通期の一覧表として作成する必要があった。
- フォルダ内にあるすべてのファイルの「目次」(インデックス)を作成し、「その目次のクリックでそのファイルが開く」様にしたい。
という事でした。
これは、そういった目的達成のためのVBAコードの「主要部品」的なモノだろうと思います。
ファイル名の自動取得一覧化のコード全体
このコード作成の肝は、
Shell関数を使って、フォルダ選択ダイアログを表示し選択できるようにすること。
Dir関数を使って、選択フォルダ内のすべてのファイルを抽出できるようにすること。
になります。
エクセルの「Sheet1」シートにファイル名の一覧表を表示します。
Sub ファイル名() Dim Shell As Object, FPath As String Dim i As Long, Fname As String Dim MB As Workbook Dim Patha As String, DA As Variant Set MB = ThisWorkbook Set Shell = CreateObject("Shell.Application") _ .BrowseForFolder(0, "フォルダを選択してください", 0, CurDir) 'キャンセルを選択 If Shell Is Nothing Then FPath = "" MsgBox "フォルダ選択がキャンセルされました。", vbExclamation Exit Sub Else 'フォルダを選択し「OK」をクリック '選択したフォルダのフルパスを入手 FPath = Shell.Items.Item.Path End If Patha = FPath & "\" 'Dir関数を使います Fname = Dir(Patha & "*.xls*") 'スタート行番号設定変数 i = 0 'すべてのファイルが検索されるまで Do While Fname <> "" i = i + 1 MB.Activate Worksheets("Sheet1").Select Cells(i, 1).Value = Fname '再検査します Fname = Dir() Loop Worksheets("Sheet1").Columns(1).AutoFit MsgBox "全部で" & i & "個ファイルがありました" End Sub
実行結果
リストアップしたファイル数をメッセージ表示します。
フォルダ選択ダイアログのポイント
Set Shell = CreateObject("Shell.Application") _ .BrowseForFolder(0, "フォルダを選択してください", 0, CurDir)
「CurDir」(デフォルトで表示するフォルダ)
この「カレントディレクトリ」の部分をドライブからの絶対パスで記述することも出来ます。
If Shell Is Nothing Then FPath = ""
ダイアログボックスのキャンセルは、If条件文で公式的記述でこのようになります。
フォルダ内ファイルの検索方法のポイント
'Dir関数を使います Fname = Dir(Patha & "*.xls*")
「Dir関数」に検索するファイル名(変数)を代入します。
今回はエクセルファイルに限定していますが、拡張子が4つありますので「ワイルドカード」を使って指定しています。
因みに、全ての拡張子と指定する時は「Patha & “*.*”」と指定します。
'すべてのファイルが検索されるまで Do While Fname <> "" ・・・ '再検査します Fname = Dir() Loop
「Do ~ Loop」の構文を使います。条件に今回は「While」を使いました。
ファイルリスト化の時に他のデータも吸い上げるポイント
'必要な数だけの変数の宣言をする Dim ValA As Variant 'データを取るためにそのエクセルファイルを開く Workbooks.Open (FPath & "\" & Fname) '変数に代入する。どこのデータを取るかはそれぞれ ValA = Worksheets("Sheet1").Range("B11") 'フォーカスが変わってしまったので、元に戻す MB.Activate Worksheets("Sheet1").Select '取って来たデータをどこに置くかはそれぞれ Cells(i, 2) = ValA Workbooks(Fname).Close False
「Do While ~ Loop」の中にこういったコードをはめ込むことになります。
エクセルファイル名をフォルダから自動取得一覧化まとめ
今回紹介したコードは、リスト化だけの ”骨組み” 的コードだけですので、
またそれぞれに、脚色していただければどうかと思います。
定番的なコード組み立てですので、使い勝手のいいものに仕上げてください。
データ検索という事では、この
無料DL「複数エクセルファイルのデータ収集VBA」使用方法を説明
という記事もあります。
今回の記事はここまでです。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。
独習によるVBA習得のキーワードは、
出来るだけ多くの実例に触れること!
です。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
このサイトでよく使うVBAのコードのトピックを纏めています。
最後までお読みいただき有難うございました。