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é!