超簡単!エクセルファイル名をフォルダから自動取得一覧化するコード

vbafilelisteyecatch

超簡単に出来ます。

保存フォルダにあるエクセルファイルでそのファイル名を自動で一度に取得して、一覧表にするVBAコードを紹介します。

操作方法はフォルダの選択でダイアログでクリック選択するだけです。

 

今回は、フォルダに保存されているファイル名をリスト化するエクセルVBAコードを紹介します。

ダイアログでフォルダを選択するだけで、そこにあるファイル名を一覧化表示できるというものです。

こんにちは、じゅんぱ店長(@junpa33)です。

 

超簡単!エクセルファイル名をフォルダから
自動取得一覧化するコード

 

「エクセルVBAでフォルダに保存したファイルのファイル名を自動的にリスト化します。」

今回はこれがテーマです。

恐らく、皆さんはリスト化が最終目的ではなくて、そのリスト化をしてさらに何かをしたい、ということではないかなと思います。

そしてまた、その目的については、お読みいただいている方々個別いろいろだろうなと思います。

 

因みに、自分的には、リスト化のVBAコードが必要になったのは、

  1. 顧客別のある販売データを、月毎にエクセル1ファイルに纏めていましたが、ファイル内の特定の数値だけを通期の一覧表として作成する必要があった。
  2. フォルダ内にあるすべてのファイルの「目次」(インデックス)を作成し、「その目次のクリックでそのファイルが開く」様にしたい。

という事でした。

これは、そういった目的達成のための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

実行結果

vbafilelistsetumei001
フォルダを選択します。
矢印下001

vbafilelistsetumei002

リストアップしたファイル数をメッセージ表示します。

 

 

フォルダ選択ダイアログのポイント

 

コード
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習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

最後までお読みいただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。