【VBA】Excel VBAで所定フォルダ内のファイル名とシート名を取得する方法

エクセル(VBA/マクロ)

説明

Excel VBAで所定フォルダ内のファイル名とシート名を取得する方法を紹介します。

所定のフォルダにファイルがありすぎて、どこに何が入ってるかわからないことってありませんか?
他にも、このファイルってどんなシートが入ってたっけ?みたいなことが私は実際に仕事でありました。
そんな方に向けて今回はExcel VBAで所定のフォルダに格納されているファイル名とその中のシート名を取得するコードを紹介しちゃいます!
Excel マクロでコードを組めば簡単に操作できちゃいます!
この記事を参考にぜひ挑戦してみてください。

今回は以下のパスにファイルを10個用意しました。
ファイル内には適当にSheetを作成しています。
「C:\tmp」
こちらのファイル名とファイルのシート名ががすべて取得できたら成功となります。

今回はフォルダパスを「A2」セルから取得してきます。
(今回は「C:\tmp」から取得するので、A2セルに記入しています)
また、ファイル名は「A5」セル、シート名は「B5」セルへ反映していきます。
下記画像のように準備してみてください!

コード

Excel VBAでファイル名を取得

早速コードを入力していきましょう。
モジュールを追加してそこにコードを入力していきます。
『挿入』タブから『標準モジュール』を選択します。

そうすると左記プロジェクトにModule1が追加されたことがわかります。
こちらの中にコードを記載していきます。

今回記入するコードは以下の通りです。

Option Explicit
Sub getSheetName()
    
    '変数名
    Dim fileArr() As String: ReDim fileArr(0)
    Dim sheetArr(1000, 1)
    Dim buf As String
    Dim path As String
    Dim i As Long
    Dim num As Long
    Dim tmpWb As Object
    Dim tmpSh As Object
    Dim rowNum As Long
    Dim maxRow As Long
    Dim errChk
    Dim Ans
    Dim preFileNm
    
    '結果表示行
    rowNum = 5
    
    'データクリア
    maxRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(rowNum, 1), Cells(1000, 2)).ClearContents
    
    'パスの最後に「\」がついてたら削除
    path = Trim(Cells(2, 1))
    If Right(path, 1) = "\" Then
        path = Left(path, Len(path) - 1)
    End If
    
    'ディレクトリ存在チェック
    errChk = Dir(path, vbDirectory)
    If errChk = "" Then
        Ans = MsgBox("パスが見つかりません", vbYesNo, "info")
        If Ans = vbNo Then Exit Sub
    End If
    
    'ディレクトリ内のファイル名を配列に格納
    buf = Dir(path & "\*.*")
    i = 0
    Do While buf <> ""
        ReDim Preserve fileArr(i)
        fileArr(i) = buf
        buf = Dir()
        i = i + 1
    Loop
    
    '拡張子「.xlsx」が含まれるファイルのシート名を取得
    Application.ScreenUpdating = False
    num = 0
    For i = 0 To UBound(fileArr)
        If InStr(fileArr(i), ".xlsx") > 0 Then
        '自身がいたら処理をスキップ
            If InStr(fileArr(i), ThisWorkbook.Name) = 0 Then
                Set tmpWb = Workbooks.Open(Filename:=path & "\" & fileArr(i), ReadOnly:=True)
                ActiveWindow.Visible = False
                For Each tmpSh In tmpWb.Sheets
                    sheetArr(num, 0) = fileArr(i)   'ファイル名
                    sheetArr(num, 1) = tmpSh.Name   'シート名
                    num = num + 1
                Next
                tmpWb.Close (False)
            End If
        End If
    Next i
    Application.ScreenUpdating = True
    
    'シート名一覧を作成
    i = 0
    Do While sheetArr(i, 0) <> ""
        'ファイル名は最初のシートのみ出力
        If preFileNm <> sheetArr(i, 0) Then
            Cells(i + rowNum, 1) = sheetArr(i, 0)
        End If
        Cells(i + rowNum, 2) = sheetArr(i, 1)
        preFileNm = sheetArr(i, 0)
        i = i + 1
    Loop
    
    MsgBox "シート名の抽出が完了しました"
End Sub

コードが書けたら実行してみましょう!

下記画像のようにファイル名とファイルの中のシート名が取得できていれば成功です!

いかがでしたでしょうか。
今回はExcel VBAで所定のパスからファイル名とファイルのシート名を取得する方法でした!

他にもExcel VBAに関する記事を書いていきますので、ぜひ他の記事も読んでみてください!


コメント

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