超簡単!フォルダからファイル名を自動取得一覧化する

vbafilelisteyecatch

ダイアログでクリック選択するだけで超簡単に出来ます。

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

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

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

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

ファイル名をフォルダから自動取得しリスト化する

vbafilelistsetumeip005

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

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

そしてその目的については、お読みいただいている方々いろいろでしょう。

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

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

という事でした。

このコードは、そういった目的達成のための「主要部品」的な処理コードになるということです。

ファイル名の自動取得一覧化のコード全体

このコード作成のポイントは、

  • Shell関数を使って、フォルダ選択ダイアログを表示し選択する。
  • Dir関数を使って、選択フォルダ内のすべてのファイルを抽出する。

になります。

エクセルの「Sheet1」シートにファイル名の一覧表を表示します。

VBA
Option Explicit

Sub ファイル名()
    Dim Shell As Object, FPath As String
    Dim i, 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

実行結果

フォルダを選択します。

vbafilelistsetumei003
矢印下001

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

vbafilelistsetumei004

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

VBA
        Set Shell = CreateObject("Shell.Application") _
            .BrowseForFolder(0, "フォルダを選択してください", 0, CurDir)

「CurDir」(デフォルトで表示するフォルダ)

この「カレントディレクトリ」の部分をドライブからの絶対パスで記述することも出来ます

VBA
        If Shell Is Nothing Then
            FPath = ""

ダイアログボックスのキャンセルは、If条件文で公式的記述でこのようになります。

フォルダ内ファイルの検索方法のポイント

VBA
'Dir関数を使う
        Fname = Dir(Patha & "*.xls*")

「Dir関数」に検索するファイル名(変数)を代入します。

今回はエクセルファイルに限定していますが、拡張子が4つありますので「ワイルドカード」を使って指定しています。

因みに、全ての拡張子と指定する時は「Patha & “*.*”」と指定します。

VBA
'すべてのファイルが検索されるまで
        Do While Fname <> ""
            i = i + 1
            MB.Activate
            Worksheets("Sheet1").Select
            Cells(i, 1).Value = Fname
'再検査します
            Fname = Dir()
        Loop

「Do ~ Loop」の構文を使います。条件に今回は「While」を使いました。

ファイルリスト化以外にも必要データ吸い上げも

ファイル名をリスト化するのではなく、フォルダ内のそれぞれのファイルから必要なデータを吸い上げることも可能です。

VBA
'吸い上げるデータの変数化して宣言
    Dim ValA As Variant
'フォルダ内のそれぞれのファイルを開く
       Workbooks.Open (FPath & "\" & Fname)
'データの有るセルを指定して変数に代入
       ValA = Worksheets("Sheet1").Range("B11")
'BOOKのフォーカスを元に戻す
       MB.Activate
'ピッキングしたデータの置き場所に移動
       Worksheets("Sheet1").Select
       Cells(i, 2) = ValA
'データを吸い取った後そのファイルを閉じる
       Workbooks(Fname).Close False

「Do While ~ Loop」の中にこういったコードをはめ込むことになります。

ファイル名を自動取得しリスト化 まとめ

vbafilelistsetumeip006

今回紹介したコードは、リスト化だけの ”骨組み” 的コードだけですので、

またそれぞれに、脚色していただければよいと思います。

定番的なコード組み立てですので、使い勝手のいいものに仕上げてください。

データ検索という事では、この

datasyusyueyecatch005 「複数エクセルファイルのデータ収集VBA」の取説と無料DL

という記事もあります。

短期間でエクセルVBAの独学習得を目指したいなら

vbafilelistsetumeip007

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

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

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

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

独習によるVBA習得のキーワードは、出来るだけ多くの実例に触れること!です。

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

ハッキリ言って、

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

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

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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