[GIÚP]Cập nhật dữ liệu từ nhiều sheet của nhiều File về nhiều sheet của 1 file tổng

Liên hệ QC

nth09061985

Thành viên mới
Tham gia
19/7/13
Bài viết
49
Được thích
5
Công việc của em là: Em có 1 File "FileTongHop" và 2 File con:"File1" và "File2"(Có thể nhiều hơn). Trong cả 3 File này đều có 3 sheet có tên lần lượt là "A", "B", "C".
Em có viết đoạn code để tổng hợp tất cả dữ liệu từ 2 file con về File tổng nhưng sao chỉ có sheet A là được tổng hợp còn các sheet "B", "C" lại không được tổng hợp ạ!
Mã:
Public Sub CapNhaT_NhieuSheet()
Dim DsFile As Variant
Dim j As Long, k As Long
Dim i As Long, LrTongHop As Long, LrFileCon As Long
Dim Wb As Workbook, WbTH As Workbook, Ws1 As Worksheet, Ws2 As Worksheet


    Set WbTH = Workbooks("FileTongHop.xlsm")
    DsFile = Application.GetOpenFilename("Excel FIles(*.xlsx),*.xlsx", MultiSelect:=True)
On Error Resume Next
Application.ScreenUpdating = False


For i = 1 To UBound(DsFile)
    'MsgBox "i= " & i
    Set Wb = Workbooks.Open(DsFile(i))
        For j = 1 To Wb.Worksheets.Count
            '   MsgBox "j= " & j
                LrFileCon = Wb.Worksheets(j).Range("A1000000").End(xlUp).Row
            For k = 1 To WbTH.Worksheets.Count
                Set Ws2 = Wb.Worksheets(j)
               'MsgBox "Sheet" & Ws2.Name
                Set Ws1 = WbTH.Worksheets(k)
                'MsgBox "k= " & k
                'MsgBox "Sheet" & Ws1.Name
                If Ws1.Name = Ws2.Name Then
                    LrTongHop = Ws1.Range("A1000000").End(xlUp).Row + 1
                    Ws2.Range("A2:C" & LrFileCon).Copy Ws1.Range("A" & LrTongHop)
                    Wb.Close
                End If
            Next k
     Next j
Next i


Application.ScreenUpdating = True
End Sub
Mong anh chị và các bạn giúp em:
+ Nếu có thể thì chỉ ra chỗ sai trong đoạn code của em và sửa giúp đoạn code trên giúp em với ạ!
+ Hoặc, nếu anh chị có giải pháp khác giúp đỡ em để phục vụ công việc của em với ạ!
 
Lần chỉnh sửa cuối:
PHP:
If Ws1.Name = Ws2.Name Then
                    LrTongHop = Ws1.Range("A1000000").End(xlUp).Row + 1
                    Ws2.Range("A2:C" & LrFileCon).Copy Ws1.Range("A" & LrTongHop)
                    Wb.Close
                End If
Tìm thấy sheet đầu tiên trùng tên / copy xong đóng file luôn.
Ngoài ra, cập nhật lại lần 2 trở đi thì dữ liệu được cộng dồn...
 
Upvote 0
PHP:
If Ws1.Name = Ws2.Name Then
                    LrTongHop = Ws1.Range("A1000000").End(xlUp).Row + 1
                    Ws2.Range("A2:C" & LrFileCon).Copy Ws1.Range("A" & LrTongHop)
                    Wb.Close
                End If
Tìm thấy sheet đầu tiên trùng tên / copy xong đóng file luôn.
Ngoài ra, cập nhật lại lần 2 trở đi thì dữ liệu được cộng dồn...
Rất cảm ơn anh! Em chưa hiểu lắm anh có thể giải thích kĩ hơn 1 chút giúp em với được không ạ!
--------------------------------------------------------------------------------------------------------------------------
P/S: Em đã hiểu rồi anh ạ!
Vậy có giải pháp nào để dữ liệu ko bị cộng dồn không anh?
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy có giải pháp nào để dữ liệu ko bị cộng dồn không anh?
Tôi chỉ sửa lại cái bạn đã làm thôi. Chắc là dài dòng... Bạn kiểm tra lại nhé.
PHP:
Sub CapNhaT_NhieuSheet2()
Dim DsFile As Variant
Dim j As Long, k As Long, stt&, lr&
Dim i As Long, LrTongHop As Long, LrFileCon As Long
Dim Wb As Workbook, WbTH As Workbook, Ws1 As Worksheet, Ws2 As Worksheet
Set WbTH = Workbooks("FileTongHop.xlsm")
DsFile = Application.GetOpenFilename("Excel FIles(*.xlsx),*.xlsx", MultiSelect:=True)
On Error Resume Next
Application.ScreenUpdating = False
'Xoa du lieu cu
For k = 1 To WbTH.Worksheets.Count
Set Ws1 = WbTH.Worksheets(k)
LrTongHop = Ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A2:C" & LrTongHop) = ""
Next k
'Copy du lieu
For i = 1 To UBound(DsFile)
    Set Wb = Workbooks.Open(DsFile(i))
        For j = 1 To Wb.Worksheets.Count
                Set Ws2 = Wb.Worksheets(j)
                LrFileCon = Ws2.Range("B" & Rows.Count).End(xlUp).Row
                For k = 1 To WbTH.Worksheets.Count
                        Set Ws1 = WbTH.Worksheets(k)
                        LrTongHop = Ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
                        If Ws1.Name = Ws2.Name Then
                            Ws2.Range("B2:C" & LrFileCon).Copy Ws1.Range("B" & LrTongHop)
                        End If
                        'Dien stt
                        lr = Ws1.Range("B" & Rows.Count).End(xlUp).Row
                        For stt = 0 To lr - 2
                            Ws1.Range("A2").Offset(stt, 0) = stt + 1
                         Next
                  Next k
        Next j
Next i
'Dong cac file
For i = 1 To UBound(DsFile)
    Workbooks(Dir(DsFile(i))).Close , False
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Tôi chỉ sửa lại cái bạn đã làm thôi. Chắc là dài dòng... Bạn kiểm tra lại nhé.
PHP:
Sub CapNhaT_NhieuSheet2()
Dim DsFile As Variant
Dim j As Long, k As Long, stt&, lr&
Dim i As Long, LrTongHop As Long, LrFileCon As Long
Dim Wb As Workbook, WbTH As Workbook, Ws1 As Worksheet, Ws2 As Worksheet
Set WbTH = Workbooks("FileTongHop.xlsm")
DsFile = Application.GetOpenFilename("Excel FIles(*.xlsx),*.xlsx", MultiSelect:=True)
On Error Resume Next
Application.ScreenUpdating = False
'Xoa du lieu cu
For k = 1 To WbTH.Worksheets.Count
Set Ws1 = WbTH.Worksheets(k)
LrTongHop = Ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A2:C" & LrTongHop) = ""
Next k
'Copy du lieu
For i = 1 To UBound(DsFile)
    Set Wb = Workbooks.Open(DsFile(i))
        For j = 1 To Wb.Worksheets.Count
                Set Ws2 = Wb.Worksheets(j)
                LrFileCon = Ws2.Range("B" & Rows.Count).End(xlUp).Row
                For k = 1 To WbTH.Worksheets.Count
                        Set Ws1 = WbTH.Worksheets(k)
                        LrTongHop = Ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
                        If Ws1.Name = Ws2.Name Then
                            Ws2.Range("B2:C" & LrFileCon).Copy Ws1.Range("B" & LrTongHop)
                        End If
                        'Dien stt
                        lr = Ws1.Range("B" & Rows.Count).End(xlUp).Row
                        For stt = 0 To lr - 2
                            Ws1.Range("A2").Offset(stt, 0) = stt + 1
                         Next
                  Next k
        Next j
Next i
'Dong cac file
For i = 1 To UBound(DsFile)
    Workbooks(Dir(DsFile(i))).Close , False
Next
Application.ScreenUpdating = True
End Sub
Cảm ơn anh Befaint lắm lắm! Quá đúng ý em luôn!@$@!^%@$@!^%
Chúc anh sức khỏe và thành đạt!
Một lần nữa cảm ơn anh!
--------------------------------------------------------------------------------------------------------------------------
P/S: Nếu có thể mong anh cho biết đoạn code nào có tác dụng bỏ việc cộng dồn dữ liệu! Cảm ơn anh nhiều lắm!
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
'Xoa du lieu cu
For k = 1 To WbTH.Worksheets.Count
Set Ws1 = WbTH.Worksheets(k)
LrTongHop = Ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A2:C" & LrTongHop) = ""
Next k
Đoạn này, xóa xong dữ liệu đã có rồi tiếp đến đoạn sau copy dữ liệu mới.
 
Upvote 0
E cần tổng hợp dữ liệu từ nhiều file, trong file có nhiều sheet như chủ thớt. E cũng đã mày mò theo các clip của thầy @Nguyễn Duy Tuân, và một số bài trên diễn đàn. tuy nhiên học chưa đâu vào đâu nên ko biết sửa thêm. hic.
Trường hợp của em như sau:
E cần tổng hợp số liệu từ nhiều người trong đơn vị, các file của từng người thì có cấu trúc như nhau gồm 3 sheet trở lên,
File tổng hợp dữ liệu cũng có cùng cấu trúc như vậy. E muốn khi ấn nút tổng hợp dữ liệu thì sẽ tổng hợp từ các file của từng người vào các sheet tương ứng.
Ví dụ: trên File tổng hợp có sheet "Bieu_37", khi tổng hợp thì dữ liệu tại sheet "Bieu_37" của các file con đc đưa về file tổng hợp mà tên của các đơn vị trên bieu 37 la cố định, chỉ cần lấy số từ cột C trở đi tương ứng với từng đơn vị

Rất mong được sự giúp đỡ của các anh chị trên diễn đàn.
E xin chân thành cảm ơn.
 

File đính kèm

Upvote 0
E cần tổng hợp dữ liệu từ nhiều file, trong file có nhiều sheet như chủ thớt. E cũng đã mày mò theo các clip của thầy @Nguyễn Duy Tuân, và một số bài trên diễn đàn. tuy nhiên học chưa đâu vào đâu nên ko biết sửa thêm. hic.
Trường hợp của em như sau:
E cần tổng hợp số liệu từ nhiều người trong đơn vị, các file của từng người thì có cấu trúc như nhau gồm 3 sheet trở lên,
File tổng hợp dữ liệu cũng có cùng cấu trúc như vậy. E muốn khi ấn nút tổng hợp dữ liệu thì sẽ tổng hợp từ các file của từng người vào các sheet tương ứng.
Ví dụ: trên File tổng hợp có sheet "Bieu_37", khi tổng hợp thì dữ liệu tại sheet "Bieu_37" của các file con đc đưa về file tổng hợp mà tên của các đơn vị trên bieu 37 la cố định, chỉ cần lấy số từ cột C trở đi tương ứng với từng đơn vị

Rất mong được sự giúp đỡ của các anh chị trên diễn đàn.
E xin chân thành cảm ơn.
Góp ý:
Bạn nên tạo một chủ đề mới cho riêng mình và nêu nội dung và đính kèm lại dữ liệu của mình, chắc sẽ có nhiều anh chị tham gia hỗ trợ bạn nhé!
Mục đích để sau này các thành viên khác cần tìm cách làm cũng tìm đúng chủ đề để áp dụng về sau.
Cám ơn
 
Upvote 0
Góp ý:
Bạn nên tạo một chủ đề mới cho riêng mình và nêu nội dung và đính kèm lại dữ liệu của mình, chắc sẽ có nhiều anh chị tham gia hỗ trợ bạn nhé!
Mục đích để sau này các thành viên khác cần tìm cách làm cũng tìm đúng chủ đề để áp dụng về sau.
Cám ơn
mình đã lập chủ đề mới tại đây: https://www.giaiphapexcel.com/diend...-đỡ-về-tổng-hợp-dữ-liệu-từ-nhiều-file.141682/
Cám ơn bác đã góp ý nhé.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom