Rekurzívne získanie zoznamu súborov a priečinkov pomocou VBA v Exceli


Dátum vydania:

Aktualizované:


Technické články > Rekurzívne získanie zoznamu súborov a priečinkov pomocou VBA v Exceli

Stav v roku 2026 a bezpečné používanie

Záver: Rekurzívne prejdite každý priečinok, zozbierajte požadované súbory a každý podpriečinok odovzdajte rovnakému postupu. Doplňte explicitné spracovanie chýb a pravidlá pre spojovacie body, symbolické odkazy, skryté priečinky a cesty s odmietnutým prístupom.

Čo sa naučíte

  • Ako FileSystemObject sprístupňuje priečinky, podpriečinky, súbory, názvy a cesty.
  • Ako rekurzia prechádza celý strom a prečo hlboké alebo cyklické štruktúry vyžadujú ochranu.
  • Ako zapisovať výsledky do hárka bez pomalého spracovania každej bunky osobitne pri veľkom objeme údajov.

Pre koho je to určené: Používatelia Excelu, ktorí vytvárajú inventár kontrolovaného stromu priečinkov vo Windows.

Kontext v roku 2026: Ukážka zachytáva pôvodný lokálny test autora. Oprávnenia a správanie odkazov overte na kópii svojej adresárovej štruktúry; pri veľmi veľkom alebo bezpečnostne citlivom strome zvážte PowerShell či špecializovaný inventarizačný nástroj.

Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Táto príručka ukazuje, ako pomocou makra VBA v Exceli získať zoznam súborov alebo priečinkov vrátane podpriečinkov. Hodí sa pre tieto úlohy:

  • získanie úplných ciest všetkých súborov alebo priečinkov v zadanom strome;
  • opakované spracovanie každého súboru alebo priečinka v strome.

Obsah

  1. Postup
  2. Vysvetlenie kódu
  3. Zhrnutie

1. Postup

Nasledujúca ukážka rekurzívne prejde zadaný priečinok.

Kód je zapísaný ako funkcia. Funkciu možno vložiť do modulu a volať ju z procedúry Sub.

'Parameter Examples
'## filePath      C:\Users\user\Desktop\test\
'## kind          false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
 
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
  filePath = Left(filePath, Len(filePath) - 1)
End If
 
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
  MsgBox "File does not exist!"
  Exit Function
End If
 
If kind Then
  Dim buf As String
  buf = Dir(filePath & "\*.*")
  Do While buf <> ""
    list.Add filePath & "\" & buf
    buf = Dir()
  Loop
Else
  list.Add filePath
End If
 
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
  For Each folder In .GetFolder(filePath).SubFolders
    getFolderOrFile folder.Path, kind, list
  Next folder
End With
 
End Function

Funkcia prijíma nasledujúce argumenty:

  • filePath: cesta ku koreňovému priečinku, napríklad C:\Users\user\Desktop\test;
  • kind: hodnota True vráti zoznam súborov, hodnota False zoznam priečinkov;
  • list: kolekcia, do ktorej sa ukladajú výsledky.

Nasledujúca procedúra ukazuje volanie funkcie.

Sub test()
 
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
  '------TODO------
  ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
 
End Sub

Volanie getFolderOrFile uloží výsledky do kolekcie list. V ukážke je argument kind nastavený na False, takže kolekcia obsahuje priečinky.

Požadované spracovanie doplňte na miesto "TODO" v cykle For. Premenná item obsahuje aktuálnu cestu.

Ukážka zapisuje každú získanú cestu do bunky A1, takže tú istú bunku opakovane prepisuje. Pri reálnom výstupe treba meniť číslo riadka alebo zapísať pole hodnôt naraz.

2. Vysvetlenie kódu

Po ukážke použitia nasleduje stručné vysvetlenie algoritmu.

Kľúčovým miestom je volanie funkcie getFolderOrFile z jej vlastného tela.

Funkcia pre každý nájdený podpriečinok znova spustí rovnaké spracovanie.

Ide o rekurziu: volania pokračujú, kým sa neprejde celý dostupný strom priečinkov.

3. Zhrnutie

Funkcia getFolderOrFile používa rekurziu na vytvorenie zoznamu súborov alebo priečinkov v celom dostupnom strome.

Pred spracovaním reálnych údajov doplňte obsluhu odmietnutého prístupu, ochranu pred cyklami odkazov a efektívny zápis veľkého výsledku do hárka.