Menu

Tự động hóa cập nhật file Excel theo thời gian thực với VBA

Khâu Nhi Trung 09/06/2026 16:56 537 lượt xem 3 trả lời

Chào các anh em, hôm nay mình muốn chia sẻ một chút về cách tự động hóa cập nhật dữ liệu trong Excel mà mình vừa tìm hiểu được. Dạo này công việc của mình liên quan đến việc theo dõi biến động giá trên nhiều file Excel nhỏ, và việc phải mở từng file để copy-paste số liệu thực sự tốn thời gian và dễ sai sót.

Sau một hồi tìm tòi, mình đã áp dụng VBA để giải quyết vấn đề này. Ý tưởng là viết một đoạn code VBA để tự động mở tất cả các file Excel trong một thư mục nhất định, sau đó lấy dữ liệu từ một sheet cụ thể trong mỗi file và paste vào một sheet tổng hợp trong file chính. Quan trọng hơn, mình còn thêm tính năng tự động chạy code này theo một khoảng thời gian nhất định (ví dụ: mỗi 5 phút) để đảm bảo dữ liệu luôn được cập nhật gần như theo thời gian thực.

Cách làm này rất hữu ích cho các bạn nào đang phải xử lý nhiều file dữ liệu tương tự và muốn tiết kiệm thời gian cũng như giảm thiểu sai sót. Dưới đây là một đoạn code cơ bản, các bạn có thể tùy chỉnh lại đường dẫn thư mục và tên sheet cho phù hợp với file của mình:

Sub AutoUpdateData()
    Dim FolderPath As String
    Dim FileName As String
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim LastRow As Long

    Set wsTarget = ThisWorkbook.Sheets("SheetTongHop") ' Thay SheetTongHop bằng tên sheet tổng hợp của bạn
    FolderPath = "C:\DuLieuCuaBan\" ' Thay bằng đường dẫn thư mục chứa các file cần cập nhật

    FileName = Dir(FolderPath & "*.xls*") ' Lấy tất cả các file Excel

    Application.ScreenUpdating = False ' Tắt cập nhật màn hình để code chạy nhanh hơn

    Do While FileName  ""
        If FileName  ThisWorkbook.Name Then ' Tránh mở chính file đang chạy code
            Set wbSource = Workbooks.Open(FolderPath & FileName)
            Set wsSource = wbSource.Sheets("SheetDuLieu") ' Thay SheetDuLieu bằng tên sheet nguồn trong các file đó

            ' Tìm dòng cuối cùng có dữ liệu trên sheet nguồn
            LastRow = wsSource.Cells(Rows.Count, "A").End(xlUp).Row

            ' Copy dữ liệu từ sheet nguồn và paste vào sheet tổng hợp
            wsSource.Range("A2:Z" & LastRow).Copy ' Điều chỉnh A2:Z cho phù hợp với phạm vi dữ liệu của bạn
            wsTarget.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

            wbSource.Close SaveChanges:=False ' Đóng file nguồn mà không lưu
        End If
        FileName = Dir
    Loop

    Application.ScreenUpdating = True ' Bật lại cập nhật màn hình
    MsgBox "Cập nhật dữ liệu hoàn tất!", vbInformation
End Sub

Để tự động chạy theo thời gian, bạn có thể sử dụng Application.OnTime. Mình sẽ chia sẻ chi tiết hơn về phần này trong một bài viết khác nếu có nhiều anh em quan tâm.

Có ai có kinh nghiệm hay mẹo nào khác để tự động hóa việc xử lý dữ liệu Excel không? Cùng thảo luận nhé!

5

Chào bạn,

Cảm ơn bạn đã chia sẻ kinh nghiệm rất hay này! Việc tự động hóa cập nhật dữ liệu bằng VBA thực sự là cứu cánh cho những ai làm việc với nhiều file Excel. Mình cũng từng gặp tình huống tương tự khi phải tổng hợp số liệu từ các báo cáo chi nhánh hàng ngày.

Bạn có thể chia sẻ chi tiết hơn về đoạn code VBA bạn dùng để mở tất cả các file trong một thư mục và lấy dữ liệu không? Mình đang rất tò mò muốn học hỏi thêm.

3

Hay quá bạn ơi! Mình cũng đang đau đầu với việc tổng hợp số liệu từ nhiều file, cái vụ copy-paste thủ công đúng là ám ảnh.

Bạn có thể chia sẻ cụ thể hơn về cách bạn xử lý việc lấy dữ liệu từ một ô cụ thể trong các file đó không? Mình đang vướng chỗ này nè, cứ loay hoay mãi. Cảm ơn bạn nhiều!

4

Thật tuyệt vời khi bạn tìm ra cách tự động hóa quy trình này bằng VBA! Mình hoàn toàn đồng ý, việc xử lý thủ công với nhiều file đúng là dễ gây mệt mỏi và sai sót.

Mình cũng đang nghiên cứu về mảng này, không biết bạn có thể bật mí thêm về cách bạn xử lý việc lấy dữ liệu từ một ô cụ thể trong các file đó không? Mình đang gặp chút khó khăn ở khâu này.

3

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

Đăng nhập Đăng ký