Chào các anh em trong diễn đàn,
Dạo này công việc của mình liên quan đến việc tổng hợp dữ liệu từ rất nhiều file Excel (mỗi file là dữ liệu của một chi nhánh). Việc copy-paste thủ công từng file vào file tổng hợp tốn rất nhiều thời gian và dễ sai sót. Mình đang tìm hiểu VBA để tự động hóa việc này.
Mình có một đoạn code VBA cơ bản để mở các file trong một thư mục và copy dữ liệu từ một sheet cụ thể sang file tổng hợp. Tuy nhiên, mình gặp một số vấn đề và muốn nhờ mọi người chỉ giáo thêm:
- Làm sao để xử lý trường hợp có file không có sheet cần lấy dữ liệu?
- Làm sao để tự động xóa các dòng trống sau khi copy dữ liệu?
- Có cách nào để kiểm tra xem dữ liệu đã tồn tại trong file tổng hợp chưa trước khi copy để tránh trùng lặp không?
Đây là đoạn code mình đang dùng:
Sub TongHopDuLieu()
Dim wbTongHop As Workbook
Dim wsTongHop As Worksheet
Dim folderPath As String
Dim fileName As String
Dim wbNguon As Workbook
Dim wsNguon As Worksheet
Dim lastRowTongHop As Long
Dim lastRowNguon As Long
Set wbTongHop = ThisWorkbook
Set wsTongHop = wbTongHop.Sheets("TongHop") ' Đổi tên sheet nếu cần
folderPath = Application.InputBox("Chọn thư mục chứa các file Excel cần tổng hợp:", "Chọn thư mục", Type:=2)
If folderPath = "False" Then Exit Sub
fileName = Dir(folderPath & " xtName.xlsx") ' Đổi *.xlsx thành *.xls hoặc *.xlsm nếu cần
Application.ScreenUpdating = False
Do While fileName <> ""
If fileName <> wbTongHop.Name Then ' Bỏ qua chính file tổng hợp
Set wbNguon = Workbooks.Open(folderPath & " xtName")
Set wsNguon = wbNguon.Sheets("Sheet1") ' Đổi tên sheet nguồn nếu cần
lastRowTongHop = wsTongHop.Cells(Rows.Count, "A").End(xlUp).Row
lastRowNguon = wsNguon.Cells(Rows.Count, "A").End(xlUp).Row
wsNguon.Range("A2:Z" & lastRowNguon).Copy ' Lấy dữ liệu từ A2 đến Z (hoặc cột cuối cùng)
wsTongHop.Cells(lastRowTongHop + 1, "A").PasteSpecial xlPasteValues ' Chỉ dán giá trị
wbNguon.Close SaveChanges:=False
End If
fileName = Dir
Loop
Application.ScreenUpdating = True
MsgBox "Tổng hợp dữ liệu hoàn tất!"
End SubRất mong nhận được sự giúp đỡ từ các cao thủ VBA!
Xin cảm ơn!