【VBA】特定フォルダのファイルとシート一覧表+ハイパーリンクを作る方法

マクロVBA
この記事は約6分で読めます。
スポンサーリンク
スポンサーリンク

【VBA】特定フォルダのファイルとシート一覧表+ハイパーリンクを作る方法

フォルダ内のファイル一覧は簡単に取り出すことができますが、
フォルダ内のエクセル「シート」一覧をとりだすのは少しテクニックが要ります。

そこで今回は、特定のフォルダ内のエクセルのシート一覧を読み込むことができる、
プログラムを紹介したと思います。

プログラム紹介

プログラムを動かす前に、

①VBAの編集画面「ツール→参照」で、
Microsoft ActiveX Data Objects 2.8 Library
を追加して下さい。
②フォルダパスを検索したいパスに設定してください。
③「任意のセルに変更」の箇所を思い通りに変更ください。

※ダブルクリックでコピー

Sub JIKKOU()
  
        Call DBMacro("C:\Users\bluei\OneDrive\ドキュメント\blog\fp") '←検索したいフォルダを指定する。
      
End Sub
 
Sub DBMacro(Path As String)
  
  Application.ScreenUpdating = False
  
'    Application.Calculation = xlCalculationManual '自動計算停止(手動計算)
  
    Dim objCn As New ADODB.Connection
    Dim objRS As ADODB.Recordset
    Dim sSheet As String
    Dim i      As Long
      
  
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set cf = fso.GetFolder(Path)
      
    Z = 2
      
    Cells(Z, 1) = "ファイルへのパス"
    Cells(Z, 2) = "ファイル名"
    Cells(Z, 3) = "シート名"
    Cells(Z, 4) = "計算用"
    Cells(Z, 5) = "フォルダパス"
    Cells(Z, 6) = "シートへのリンク"
    Z = Z + 1
      
    For Each sFile In cf.Files
   
    If sFile = "False" Then
        Exit Sub
    End If
      
    If sFile.Name Like "*.xls*" Then
      
    Else
        GoTo Continue
    End If
    
'db関数を使用。
    With objCn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .Properties("Extended Properties") = "Excel 12.0"
        .Open sFile
        Set objRS = .OpenSchema(ADODB.adSchemaTables)
    End With
  
’シート名を取り出す作業
    Do Until objRS.EOF
        sSheet = objRS.Fields("TABLE_NAME").Value
        If Right(sSheet, 1) = "$" Or Right(sSheet, 2) = "$'" Then
            If Right(sSheet, 1) = "$" Then
                sSheet = Left(sSheet, Len(sSheet) - 1)
            End If
            If Right(sSheet, 2) = "$'" Then
                sSheet = Left(sSheet, Len(sSheet) - 2)
            End If
            If Left(sSheet, 1) = "'" Then
                sSheet = Mid(sSheet, 2)
            End If
            sSheet = Replace(sSheet, "''", "'")
    
'情報を張っていく。
     Application.DisplayAlerts = False
              
            Cells(Z, 1) = sFile.Path
            Cells(Z, 2) = sFile.Name
            Cells(Z, 3) = "'" & Replace(sSheet, "#", ".")
              
            Cells(Z, 4) = InStrRev(Cells(Z, 1), "\")
            Cells(Z, 5) = Left(Cells(Z, 1), Cells(Z, 4))
            CELLPASS = "'" & Cells(Z, 5) & "[" & Cells(Z, 2) & "]" & Cells(Z, 3) & "'!"
            Cells(Z, 6) = "=HYPERLINK(A" & Z & "&""#""&C" & Z & "&""!A1"",""リンク"")"
      
        Application.DisplayAlerts = True
              
            Z = Z + 1
        End If
        objRS.MoveNext
    Loop
    objRS.Close
    objCn.Close
    Set objRS = Nothing
    Set objCn = Nothing
      
        Application.StatusBar = Z
      
Continue:
    Next
 
    '子フォルダも同様に、subFolderを実行する。
    With CreateObject("Scripting.FileSystemObject")
        For Each childf In .GetFolder(Path).SubFolders
            Call DBMacro(childf.Path)
        Next
    End With
      
    Application.Calculation = xlCalculationAutomatic '自動計算開始
     
  Application.ScreenUpdating = True
      
End Sub

プログラムの説明

プログラムは、
・ADOを使って、エクセルをDBとみなして、
 各ファイルのシートの情報をとってくる
・その情報と、パスの情報を組み合わせて、ハイパーリンクを作成していく

Cells(Z, 6) = "=HYPERLINK(A" & Z & "&""#""&C" & Z & "&""!A1"",""リンク"")"

プログラムとなっています。

まとめ

フォルダの整理が追い付かなくなってきたら、
ぜひ使ってみていただけたらと思います。

コメント欄

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