Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc tạo danh sách các file trong một thư mục bằng VBA

Sìn Đức Loan 27/03/2026 14:17 285 lượt xem 1 trả lời

Chào các bạn,

Dạo này mình đang phải làm việc với rất nhiều file Excel nằm chung trong một thư mục. Mỗi lần cần xem lại danh sách các file đó để mở, mình lại phải mở thư mục ra xem rất mất thời gian. Vì vậy, mình đã mày mò và viết một đoạn code VBA nhỏ để tự động hóa việc này.

Code này sẽ giúp bạn liệt kê tất cả các file Excel (có đuôi .xls, .xlsx, .xlsm) trong một thư mục cụ thể và xuất danh sách đó ra một sheet mới trong file Excel hiện tại. Rất tiện lợi phải không?

Code VBA:


Sub ListFilesInFolder()
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim folderPath As String
    Dim ws As Worksheet
    Dim rowNum As Long

    ' Yêu cầu người dùng chọn thư mục
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Chọn thư mục chứa file Excel"
        .AllowMultiSelect = False
        If .Show  -1 Then Exit Sub
        folderPath = .SelectedItems(1)
    End With

    ' Kiểm tra xem đường dẫn có kết thúc bằng dấu \ hay không
    If Right(folderPath, 1)  "\" Then folderPath = folderPath & "\"

    ' Tạo đối tượng FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderPath)

    ' Thêm một sheet mới để chứa danh sách file
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets("DanhSachFile")
    If ws Is Nothing Then
        Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        ws.Name = "DanhSachFile"
    Else
        ws.Cells.ClearContents
    End If
    On Error GoTo 0

    ' Ghi tiêu đề
    ws.Cells(1, 1).Value = "Tên file"
    ws.Cells(1, 1).Font.Bold = True
    rowNum = 2

    ' Duyệt qua tất cả các file trong thư mục
    For Each file In folder.Files
        ' Chỉ lấy các file Excel có đuôi .xls, .xlsx, .xlsm
        If LCase(fso.GetExtensionName(file.Name)) = "xls" Or _
           LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _
           LCase(fso.GetExtensionName(file.Name)) = "xlsm" Then
            ws.Cells(rowNum, 1).Value = file.Name
            rowNum = rowNum + 1
        End If
    Next file

    ' Tự động điều chỉnh độ rộng cột
    ws.Columns("A").AutoFit

    MsgBox "Đã tạo xong danh sách file Excel trong thư mục: " & folderPath, vbInformation

    ' Giải phóng đối tượng
    Set file = Nothing
    Set folder = Nothing
    Set fso = Nothing
    Set ws = Nothing
End Sub

Cách sử dụng:

  • Mở file Excel bạn muốn tạo danh sách.
  • Nhấn Alt + F11 để mở cửa sổ VBA Editor.
  • Vào Insert > Module.
  • Copy và paste đoạn code trên vào cửa sổ Module.
  • Chạy macro bằng cách nhấn F5 hoặc vào View > Macros, chọn ListFilesInFolder và nhấn Run.
  • Một hộp thoại sẽ hiện ra yêu cầu bạn chọn thư mục. Chọn thư mục chứa các file Excel bạn muốn liệt kê.
  • Một sheet mới tên là "DanhSachFile" sẽ được tạo ra với danh sách các file Excel trong thư mục đó.

Hy vọng đoạn code này hữu ích cho mọi người. Nếu có câu hỏi hoặc muốn cải tiến gì thêm, mọi người cứ thảo luận nhé!

5

Hay quá bạn ơi! Mình cũng thường xuyên gặp tình huống tương tự, việc phải lục lọi từng file trong thư mục đúng là tốn thời gian thật.

Code VBA bạn chia sẻ rất hữu ích. Mình đang thắc mắc không biết nếu thư mục có quá nhiều file thì code có chạy chậm không nhỉ? Liệu có cách nào để lọc ra chỉ các file Excel theo một tên gọi nhất định không, ví dụ chỉ lấy các file có chứa "Báo cáo" trong tên chẳng hạn?

4

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký