(Góc giúp đỡ): Lấy dữ liệu tổng hợp từ nhiều file excel trong 1 folder

Liên hệ QC

giangnt95

Thành viên mới
Tham gia
29/5/19
Bài viết
39
Được thích
1
Em chào mọi người. Em có 1 folder " Tiền về GHTK" muốn tổng hợp dữ liệu tự động vào 1 file excel như ảnh (cấu trúc giống với các filetrong folder "Tiền về GHTK")ạ và khi copy file mới vào folder chạy tự động cập nhật dữ liệu ạ . Mọi người giúp e với ạ. Em cảm ơn ạ!z3519718929646_16bc1b5616640b3a7fe198063f96a90a.jpg
 

File đính kèm

  • Tiền về GHTK.rar
    429.7 KB · Đọc: 11
Em chào mọi người. Em có 1 folder " Tiền về GHTK" muốn tổng hợp dữ liệu tự động vào 1 file excel như ảnh (cấu trúc giống với các filetrong folder "Tiền về GHTK")ạ và khi copy file mới vào folder chạy tự động cập nhật dữ liệu ạ . Mọi người giúp e với ạ. Em cảm ơn ạ!View attachment 277893
Tổng hợp ở đây là
1/cộng dồn nếu có trùng( Mã đơn hàng-mã đơn hàng) cả 2 hay cái nào là khóa chính,
2/hay là copy và dán liên tiếp xuống dưới, hết sh này tiếp đến sh khác.
 
Upvote 0
Tổng hợp ở đây là
1/cộng dồn nếu có trùng( Mã đơn hàng-mã đơn hàng) cả 2 hay cái nào là khóa chính,
2/hay là copy và dán liên tiếp xuống dưới, hết sh này tiếp đến sh khác.
Dạ, là trường hợp 2 anh ạ "2/hay là copy và dán liên tiếp xuống dưới, hết sh này tiếp đến sh khác."
 
Upvote 0
Bạn cho mình hỏi hơi ngoài lề một chút, là mỗi một file excel là một người nhập số liệu riêng , ý mình là nhiều người nhập từng file riêng của họ xong họ gửi file đó cho bạn, còn bạn là người tổng hợp. Ý mình hỏi là có phải các chi nhánh sẽ gửi về cho bạn file excel của từng chi nhánh còn bạn là người tổng hợp lại.
 
Upvote 0
Em chào mọi người. Em có 1 folder " Tiền về GHTK" muốn tổng hợp dữ liệu tự động vào 1 file excel như ảnh (cấu trúc giống với các filetrong folder "Tiền về GHTK")ạ và khi copy file mới vào folder chạy tự động cập nhật dữ liệu ạ . Mọi người giúp e với ạ. Em cảm ơn ạ!View attachment 277893
Bạn tham khảo file đính kèm và code bên dưới.
Bạn có thể thay đổi địa chỉ đường dẫn ở dòng biến FolderPath

Code như sau:
PHP:
Sub CombineData()
    Dim FSo As Object, oFolder As Object, oFile As Object
    Dim Wb As Workbook, Master As Worksheet, Data()
    Dim FolderPath As String, fName As String
    Dim fR As Integer, lR As Integer
    
    Application.ScreenUpdating = False
    Set Master = ThisWorkbook.Sheets("Sheet1")
    'Xoa du lieu cu
    Master.Range("A1").CurrentRegion.Offset(1).ClearContents
    
    'Duong dan Folder can tong hop thong tin
    FolderPath = "C:\Users\Thinh Nguyen\OneDrive\Desktop\Tien ve GHTK"    'Thay doi ten Folder can tong hop tren may cua ban
    
    'Khai bao FSo
    Set FSo = CreateObject("Scripting.FileSystemObject")
    'Chon Folder
    Set oFolder = FSo.getfolder(FolderPath)
    'Chay vong lap qua tung file trong Folder duoc chon
    For Each oFile In oFolder.Files
        'Kiem tra de lay file Excel bang ten duoi
        If FSo.getextensionname(oFile) Like "xls*" Then
            'Ten file
            fName = oFile.Name
            'Mo file
            Set Wb = Workbooks.Open(oFile)
            'Sheet dau tien cua file duoc mo
            With Wb.Worksheets(1)
                'Tim vi tri dong dau tien co du lieu can lay
                fR = .Columns("A:A").Find("STT").Row + 1
                'Tim vi tri dong cuoi cung co du lieu can lay
                lR = .Range("H" & Rows.Count).End(xlUp).Row - 1
                'Gan du lieu can lay vao mang 2 chieu
                Data() = .Range("A" & fR).Resize(lR - fR + 1, 27).Value
            End With
            'Dong file
            Wb.Close
            
            'Dien du lieu vao Master
            fR = Master.Range("A" & Rows.Count).End(xlUp).Row + 1
            Master.Range("A" & fR).Resize(UBound(Data, 1), 27) = Data
            'Dien cot ten file
            Master.Range("AB" & fR).Resize(UBound(Data, 1)) = fName
        End If
    Next oFile
    
    Set Master = Nothing: Set Wb = Nothing
    Set FSo = Nothing: Set oFolder = Nothing: Set oFile = Nothing
    
    Application.ScreenUpdating = False
    
    MsgBox "Done", vbInformation, "GPE"
    
End Sub
 

File đính kèm

  • Combine Data.xlsb
    23.8 KB · Đọc: 14
Upvote 0
Dạ, là trường hợp 2 anh ạ "2/hay là copy và dán liên tiếp xuống dưới, hết sh này tiếp đến sh khác."
Trong khi chờ các giải pháp khác, hãy thử thêm 1 đoạn code sau:
Mã:
Option Explicit

Sub TongHop()
Dim i&, j&, Lr&, R&, C&, t&, k&
Dim Arr(), Res()
Dim Dic As Object, Key
Dim Ws As Worksheet, Sh As Worksheet
Dim WbMoi As Workbook, WbD As Workbook
Dim file As Variant, Rng As Range
Application.ScreenUpdating = False
Application.DisplayAlerts = False


Set Sh = Sheets("Tong Hop")
    Lr = Sh.Cells(Rows.Count, 26).End(xlUp).Row
    ReDim Res(1 To 10000, 1 To 28)
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder("C:\Users\Admin\Downloads\Tien ve GHTK\").Files
    If file.Name Like "*.xls" Then
        If Lr > 28 Then
            Set Rng = Sh.Range("AB28:AB" & Lr)
           If Rng.Find(file.Name) Is Nothing Then
                Set WbMoi = Workbooks.Open(file)
                For Each Ws In WbMoi.Sheets
                    Lr = Ws.Cells(Rows.Count, 26).End(xlUp).Row - 1
                    If Lr < 30 Then Exit For
                        Arr = Ws.Range("A29:AA" & Lr).Value
                        R = UBound(Arr): C = UBound(Arr, 2)
                        For i = 1 To R
                            t = t + 1
                            Res(t, 28) = file.Name
                            For j = 1 To C
                                Res(t, j) = Arr(i, j)
                            Next j
                        Next i
                Next Ws
                WbMoi.Close
            End If
        Else
           Set WbMoi = Workbooks.Open(file)
            For Each Ws In WbMoi.Sheets
                Lr = Ws.Cells(Rows.Count, 26).End(xlUp).Row - 1
                If Lr < 30 Then Exit For
                    Arr = Ws.Range("A29:AA" & Lr).Value
                    R = UBound(Arr): C = UBound(Arr, 2)
                    For i = 1 To R
                        t = t + 1
                        Res(t, 28) = file.Name
                        For j = 1 To C
                            Res(t, j) = Arr(i, j)
                        Next j
                    Next i
            Next Ws
            WbMoi.Close
        End If
End If
Next file
     Lr = Sh.Cells(Rows.Count, 26).End(xlUp).Row
            Sh.Rows(Lr + 1 & ":" & Lr + t).Insert Shift:=xlDown
            Sh.Range("A" & Lr + 1).Resize(t, 28) = Res
            Sh.Range("A29").Resize(t, 28).Select
    With Selection
        .Interior.Color = xlNone
        .Borders.LineStyle = 1
        .Font.Bold = False
    End With
    
 Set Dic = Nothing
 
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox "Done"

End Sub
Chú: Đường dẫn của bạn có thể khác.
 

File đính kèm

  • Tien ve GHTK.rar
    553.5 KB · Đọc: 15
Upvote 0
Bạn cho mình hỏi hơi ngoài lề một chút, là mỗi một file excel là một người nhập số liệu riêng , ý mình là nhiều người nhập từng file riêng của họ xong họ gửi file đó cho bạn, còn bạn là người tổng hợp. Ý mình hỏi là có phải các chi nhánh sẽ gửi về cho bạn file excel của từng chi nhánh còn bạn là người tổng hợp lại.
Dạ vâng anh ạ. Em là người tổng hợp lại ạ
Bài đã được tự động gộp:

Bạn tham khảo file đính kèm và code bên dưới.
Bạn có thể thay đổi địa chỉ đường dẫn ở dòng biến FolderPath

Code như sau:
PHP:
Sub CombineData()
    Dim FSo As Object, oFolder As Object, oFile As Object
    Dim Wb As Workbook, Master As Worksheet, Data()
    Dim FolderPath As String, fName As String
    Dim fR As Integer, lR As Integer
   
    Application.ScreenUpdating = False
    Set Master = ThisWorkbook.Sheets("Sheet1")
    'Xoa du lieu cu
    Master.Range("A1").CurrentRegion.Offset(1).ClearContents
   
    'Duong dan Folder can tong hop thong tin
    FolderPath = "C:\Users\Thinh Nguyen\OneDrive\Desktop\Tien ve GHTK"    'Thay doi ten Folder can tong hop tren may cua ban
   
    'Khai bao FSo
    Set FSo = CreateObject("Scripting.FileSystemObject")
    'Chon Folder
    Set oFolder = FSo.getfolder(FolderPath)
    'Chay vong lap qua tung file trong Folder duoc chon
    For Each oFile In oFolder.Files
        'Kiem tra de lay file Excel bang ten duoi
        If FSo.getextensionname(oFile) Like "xls*" Then
            'Ten file
            fName = oFile.Name
            'Mo file
            Set Wb = Workbooks.Open(oFile)
            'Sheet dau tien cua file duoc mo
            With Wb.Worksheets(1)
                'Tim vi tri dong dau tien co du lieu can lay
                fR = .Columns("A:A").Find("STT").Row + 1
                'Tim vi tri dong cuoi cung co du lieu can lay
                lR = .Range("H" & Rows.Count).End(xlUp).Row - 1
                'Gan du lieu can lay vao mang 2 chieu
                Data() = .Range("A" & fR).Resize(lR - fR + 1, 27).Value
            End With
            'Dong file
            Wb.Close
           
            'Dien du lieu vao Master
            fR = Master.Range("A" & Rows.Count).End(xlUp).Row + 1
            Master.Range("A" & fR).Resize(UBound(Data, 1), 27) = Data
            'Dien cot ten file
            Master.Range("AB" & fR).Resize(UBound(Data, 1)) = fName
        End If
    Next oFile
   
    Set Master = Nothing: Set Wb = Nothing
    Set FSo = Nothing: Set oFolder = Nothing: Set oFile = Nothing
   
    Application.ScreenUpdating = False
   
    MsgBox "Done", vbInformation, "GPE"
   
End Sub
Dạ, e cảm ơn ạ
Bài đã được tự động gộp:

Trong khi chờ các giải pháp khác, hãy thử thêm 1 đoạn code sau:
Mã:
Option Explicit

Sub TongHop()
Dim i&, j&, Lr&, R&, C&, t&, k&
Dim Arr(), Res()
Dim Dic As Object, Key
Dim Ws As Worksheet, Sh As Worksheet
Dim WbMoi As Workbook, WbD As Workbook
Dim file As Variant, Rng As Range
Application.ScreenUpdating = False
Application.DisplayAlerts = False


Set Sh = Sheets("Tong Hop")
    Lr = Sh.Cells(Rows.Count, 26).End(xlUp).Row
    ReDim Res(1 To 10000, 1 To 28)
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder("C:\Users\Admin\Downloads\Tien ve GHTK\").Files
    If file.Name Like "*.xls" Then
        If Lr > 28 Then
            Set Rng = Sh.Range("AB28:AB" & Lr)
           If Rng.Find(file.Name) Is Nothing Then
                Set WbMoi = Workbooks.Open(file)
                For Each Ws In WbMoi.Sheets
                    Lr = Ws.Cells(Rows.Count, 26).End(xlUp).Row - 1
                    If Lr < 30 Then Exit For
                        Arr = Ws.Range("A29:AA" & Lr).Value
                        R = UBound(Arr): C = UBound(Arr, 2)
                        For i = 1 To R
                            t = t + 1
                            Res(t, 28) = file.Name
                            For j = 1 To C
                                Res(t, j) = Arr(i, j)
                            Next j
                        Next i
                Next Ws
                WbMoi.Close
            End If
        Else
           Set WbMoi = Workbooks.Open(file)
            For Each Ws In WbMoi.Sheets
                Lr = Ws.Cells(Rows.Count, 26).End(xlUp).Row - 1
                If Lr < 30 Then Exit For
                    Arr = Ws.Range("A29:AA" & Lr).Value
                    R = UBound(Arr): C = UBound(Arr, 2)
                    For i = 1 To R
                        t = t + 1
                        Res(t, 28) = file.Name
                        For j = 1 To C
                            Res(t, j) = Arr(i, j)
                        Next j
                    Next i
            Next Ws
            WbMoi.Close
        End If
End If
Next file
     Lr = Sh.Cells(Rows.Count, 26).End(xlUp).Row
            Sh.Rows(Lr + 1 & ":" & Lr + t).Insert Shift:=xlDown
            Sh.Range("A" & Lr + 1).Resize(t, 28) = Res
            Sh.Range("A29").Resize(t, 28).Select
    With Selection
        .Interior.Color = xlNone
        .Borders.LineStyle = 1
        .Font.Bold = False
    End With
   
 Set Dic = Nothing
 
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
   
    MsgBox "Done"

End Sub
Chú: Đường dẫn của bạn có thể khác.
Dạ, Vâng ạ. E cảm ơn ạ
 
Upvote 0
Ban thử xem ý tưởng này được không nhé:
mọi người sẽ đăng nhập vào trang web,
mỗi người chỉ có thể chỉnh sửa trên file của họ ví dụ 2 tài khoản ghn1@gmail.comghn2@gmail.com
và bạn là admin có thể xem được tất cả các file.
video minh họa:

 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom