Nối nhiều file excel thành 1 file excel

Liên hệ QC

toikhongvao

Thành viên mới
Tham gia
4/1/10
Bài viết
18
Được thích
2
Mô tả công việc tự động là thế này.
Chuẩn bị: Đưa tất cả cá file excel vào cùng 1 folder, tên file theo thứ tự 1,2,3,.... các File excel có cùng cấu trúc, cùng số cột, số dòng khác nhau.
Chạy macro:
Tạo một file excel mới tên tonghop. nằm cùng folder với các file trên và lấy dữ liệu từ các file trong folder nối lại với nhau.
Xong
Xin giúp mình, THX
 
Bạn mà không đưa file mô tả lên đây thì tôi nghĩ là chờ đến tết Công gô mới có người giúp bạn được.
 
Upvote 0
Bạn toikhongvao có cùng ý tưởng với mình. Để mình giải thích rõ thêm:

Giả sử mình có nhiều file báo cáo lỗi theo ngày của nhiều dây chuyền (File được nhập hàng ngày bằng tay). Giờ mình muốn làm một file báo cáo tháng tổng hợp từ các báo cáo ngày (File chạy tự động)
- Giả đã có file lỗi của 3 dây chuyền trong 2 ngày 19/01 & 20/01 (daily report)
- Mình muốn cập nhập tự động vào file báo cáo tháng (monthly report): theo từng dây chuyền, và theo từng ngày.

Yêu cầu : - Hiện thị các hộp thoại để cho người tổng hợp file monthly report chọn file cần cập nhập hoặc dây chuyền cần cập nhập
- Nếu tên lỗi đã có trong báo cáo tháng thì tự điền số lượng lỗi (nếu chưa thì chèn thêm vào cột tên lỗi và điền số lượng lỗi theo ngày tương ứng)

Vì đây là file tương đối khó +-+-+-+ +-+-+-+ +-+-+-+ nên mong mọi người giúp đỡ. @$@!^%@$@!^%@$@!^%

Mình xin cảm ơn. -=.,,
 

File đính kèm

  • Daily report 19-01-2010.xls
    18.5 KB · Đọc: 300
  • Daily report 20-01-2010.xls
    18.5 KB · Đọc: 141
  • Monthly report.xls
    18.5 KB · Đọc: 274
Lần chỉnh sửa cuối:
Upvote 0
chỉ đơn giản là nối nhiều sheet nằm ở nhiều file thành 1 sheet nằm ở 1 file mới thôi.
Xin lỗi, mình không up file lên được vì máy nội bộ không thể sao chép dữ liệu ra ngoài.
Mình chỉ cần code tổng quát cũng được, tại xưa giờ mình không để ý mấy điều hay dạng macro trong excel.
THX
 
Upvote 0
Mô tả công việc tự động là thế này.
Chuẩn bị: Đưa tất cả cá file excel vào cùng 1 folder, tên file theo thứ tự 1,2,3,.... các File excel có cùng cấu trúc, cùng số cột, số dòng khác nhau.
Chạy macro:
Tạo một file excel mới tên tonghop. nằm cùng folder với các file trên và lấy dữ liệu từ các file trong folder nối lại với nhau.
Xong
Xin giúp mình, THX
Bạn tham khảo file đính kèm nhé. Ở đây, mỗi file có 3 sheet, nếu bạn muốn thêm sheet thì phải thêm vào các file như nhau (số lượng sheet, tên sheet, số cột trong mỗi sheet).
Góp ý một xíu: Nếu không đưa dữ liệu thực của bạn được (vì một lí do tế nhị nào đó) thì bạn nên giả lập các file tương tự. Bởi vì chính bạn biết rõ nhất là bạn cần gì và nếu có file minh họa thì người khác sẽ đỡ mất công hơn (đôi khi công này là vô ích vì không đúng ý người hỏi).
Chúc thành công!
 

File đính kèm

  • Tong_hop_du_lieu.rar
    27 KB · Đọc: 1,363
Lần chỉnh sửa cuối:
Upvote 0
Bạn toikhongvao có cùng ý tưởng với mình. Để mình giải thích rõ thêm:

Giả sử mình có nhiều file báo cáo lỗi theo ngày của nhiều dây chuyền (File được nhập hàng ngày bằng tay). Giờ mình muốn làm một file báo cáo tháng tổng hợp từ các báo cáo ngày (File chạy tự động)
- Giả đã có file lỗi của 3 dây chuyền trong 2 ngày 19/01 & 20/01 (daily report)
- Mình muốn cập nhập tự động vào file báo cáo tháng (monthly report): theo từng dây chuyền, và theo từng ngày.

Yêu cầu : - Hiện thị các hộp thoại để cho người tổng hợp file monthly report chọn file cần cập nhập hoặc dây chuyền cần cập nhập
- Nếu tên lỗi đã có trong báo cáo tháng thì tự điền số lượng lỗi (nếu chưa thì chèn thêm vào cột tên lỗi và điền số lượng lỗi theo ngày tương ứng)

Vì đây là file tương đối khó +-+-+-+ +-+-+-+ +-+-+-+ nên mong mọi người giúp đỡ. @$@!^%@$@!^%@$@!^%

Mình xin cảm ơn. -=.,,
Dùng VBA kết hợp với PivotTable để làm bài tập này.
Bạn xem file đính kèm nha
 

File đính kèm

  • TongHopFile.rar
    26.1 KB · Đọc: 958
Upvote 0
@nghiaphuc: cám ơn bạn rất nhiều, cũng gần đúng đúng yêu cầu của mình.
Mình xin lấy file ví dụ của bạn để làm ví dụ của mình.
Xin lỗi vì chức năng upload trên forum xài không được nên mình up qua link này.
http://www.mediafire.com/?3njgdqzttnx
Yêu cầu của mình là từ 3 file, chạy macro hay gì cũng được để tạo 1 file mới tên tổng hợp với dữ liệu lấy từ các file trên nối lại với nhau, sau đó thêm vào một cột mới để phân biệt dữ liệu của file nào trong bảng tổng hợp. (không cần tạo sheet cho mỗi dữ liệu trong file tổng hợp vì sẽ gây khó khăn nếu muốn dùng pivottable)
THX. Xin giúp giùm
 
Upvote 0
Dùng VBA kết hợp với PivotTable để làm bài tập này.
Bạn xem file đính kèm nha

Gửi bạn Domfootwear,

Cám ơn bạn đã làm giúp mình.

Mình thử lại thì thấy sau khi bấm nút lệnh, sheet tonghop vẫn trắng
(chưa lấy dữ liệu được từ các sheet khác, của các file khác)
Mình đã thử copy & paste để tiêu đề trùng nhau nhưng cũng vẫn không được.

Bạn xem lại giúp mình nhé.

Mình cũng muốn chọn từng file để cập nhập thay vì chọn cả folder để tránh việc
phải cập nhập lại. Mong bạn kiểm tra lại và hướng dẫn thêm giúp mình.

Xin cảm ơn.@$@!^%@$@!^%@$@!^%
 
Upvote 0
@nghiaphuc: cám ơn bạn rất nhiều, cũng gần đúng đúng yêu cầu của mình.
Mình xin lấy file ví dụ của bạn để làm ví dụ của mình.
Xin lỗi vì chức năng upload trên forum xài không được nên mình up qua link này.
http://www.mediafire.com/?3njgdqzttnx
Yêu cầu của mình là từ 3 file, chạy macro hay gì cũng được để tạo 1 file mới tên tổng hợp với dữ liệu lấy từ các file trên nối lại với nhau, sau đó thêm vào một cột mới để phân biệt dữ liệu của file nào trong bảng tổng hợp. (không cần tạo sheet cho mỗi dữ liệu trong file tổng hợp vì sẽ gây khó khăn nếu muốn dùng pivottable)
THX. Xin giúp giùm
Vậy thì ở mỗi file, bạn dán một sub như vầy nè:
PHP:
Sub Ghi_DL()
    Dim FileS As FileSearch
    Dim Wb, Wb1 As Workbook
    Dim FPath As String
    Dim F As Variant
 
    Application.ScreenUpdating = False
    Set Wb = ThisWorkbook: FPath = Wb.Path
    Set FileS = Application.FileSearch
    With FileS
        .NewSearch
        .Filename = "*.xls"
        .LookIn = FPath
        .SearchSubFolders = False
        .Execute
    End With
    Set Wb1 = Workbooks.Add 'Them mot Workbook moi (file tong hop)'
    'Copy du lieu cua file hien hanh va dan vao file tong hop'
    Wb.Activate
    ActiveSheet.UsedRange.Copy
    Wb1.Activate
    ActiveSheet.[A1].PasteSpecial Paste:=xlPasteAll
    [IV1].End(xlToLeft).Offset(0, 1) = "File"
    Selection.Offset(1, Selection.Columns.Count).Resize(Selection.Rows.Count - 1, 1).Value = Left(Wb.Name, Len(Wb.Name) - 4)
    'Copy du lieu cua cac file con lai va dan vao file tong hop'
    For Each F In Application.FileSearch.FoundFiles
        If F = ThisWorkbook.FullName Then GoTo NextFile
        Workbooks.Open F
        Set Wb = Workbooks(Replace(F, FPath & "\", ""))
        Wb.Activate
        ActiveSheet.UsedRange.Offset(1).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Copy
        Wb1.Activate
        ActiveSheet.UsedRange.Offset(ActiveSheet.UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteAll
        Selection.Offset(0, Selection.Columns.Count).Resize(Selection.Rows.Count, 1).Value = Left(Wb.Name, Len(Wb.Name) - 4)
        Wb.Close False
NextFile:
    Next F
    Wb1.SaveAs FPath & "\Tong hop.xls" 'Luu file tong hop lai'
    Application.ScreenUpdating = True
End Sub
Như vầy thì bạn có thể tổng hợp dữ liệu từ 1 trong 3 file 1.xls, 2.xls, 3.xls. Kết quả sẽ được lưu vào file Tong hop.xls trong cùng thư mục với 3 file trên.
 

File đính kèm

  • Tong hop du lieu.rar
    27.9 KB · Đọc: 843
Upvote 0
Bạn có thể vui lòng giải thích về đoạn code này được ko?
(vd như tác dụng và ý nghĩa của từng đoạn trong đó ....)
Vì mình ko có kiến thức về code nhiều, nên mình muốn hiểu để áp dụng cho các file của mình, thanks bạn nhiều
 
Upvote 0
Bạn có thể vui lòng giải thích về đoạn code này được ko?
(vd như tác dụng và ý nghĩa của từng đoạn trong đó ....)
Vì mình ko có kiến thức về code nhiều, nên mình muốn hiểu để áp dụng cho các file của mình, thanks bạn nhiều
Nó là như vầy nè:
PHP:
Sub Ghi_DL()
    Dim FileS As FileSearch
    Dim Wb, Wb1 As Workbook
    Dim FPath As String
    Dim F As Variant
 
    Application.ScreenUpdating = False 'Không cho hiện sự thay đổi trên màn hình
    Set Wb = ThisWorkbook 'Dat bien Wb la workbook dang mo (VD: file 1.xls, file 2.xls,...)
    FPath = Wb.Path 'Gan duong dan cua workbook dang mo cho bien FPath
    Set FileS = Application.FileSearch
    With FileS
        .NewSearch 'Thiet lap mot phien tim kiem moi
        .Filename = "*.xls" 'Tim cac file excel
        .LookIn = FPath 'Tim trong thu muc FPath (co duong dan da gan o tren)
        .SearchSubFolders = False 'Khong tim trong thu muc con
        .Execute 'Thuc thi lenh tim kiem
    End With
    Set Wb1 = Workbooks.Add 'Them mot Workbook moi (file tong hop)'
    'Bat dau Copy du lieu cua file hien hanh va dan vao file tong hop'
    Wb.Activate 'Chon workbook hien hanh la Wb (da gan o tren)
    ActiveSheet.UsedRange.Copy 'Copy du lieu tai sheet hien hanh
    Wb1.Activate 'Chuyen sang file tong hop
    ActiveSheet.[A1].PasteSpecial Paste:=xlPasteAll 'Dan du lieu da sao chep o tren
    [IV1].End(xlToLeft).Offset(0, 1) = "File" 'Gan tieu de cho cot cuoi
    Selection.Offset(1, Selection.Columns.Count).Resize(Selection.Rows.Count - 1, 1).Value = Left(Wb.Name, Len(Wb.Name) - 4) 'Ghi ten file vao cot cuoi cung trong bang
    'Ket thuc copy du lieu cua file hien hanh vao file tong hop
    'Bat dau Copy du lieu cua cac file con lai va dan vao file tong hop'
    For Each F In Application.FileSearch.FoundFiles 'Duyet qua tat ca cac file tim thay o tren
        If F = ThisWorkbook.FullName Then GoTo NextFile 'Neu F la file hien hanh thi bo qua (vi da copy roi)
        Workbooks.Open F 'Mo file F
        Set Wb = Workbooks(Replace(F, FPath & "\", "")) 'Dat bien Wb la workbook F (sau khi da bo qua duong dan)
        Wb.Activate 'Doan lenh nay tuong tu ben tren (da giai thich)
        ActiveSheet.UsedRange.Offset(1).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Copy
        Wb1.Activate
        ActiveSheet.UsedRange.Offset(ActiveSheet.UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteAll
        Selection.Offset(0, Selection.Columns.Count).Resize(Selection.Rows.Count, 1).Value = Left(Wb.Name, Len(Wb.Name) - 4)
        Wb.Close False 'Dong file F lai ma khong luu
NextFile:
    Next F 'Xet file ke tiep trong cac file da tim thay
    Wb1.SaveAs FPath & "Tong hop.xls" 'Luu file tong hop lai'
    Application.ScreenUpdating = True 'Cho hiện lại sự thay đổi trên màn hình
End Sub
 
Upvote 0
Mình thấy bạn làm rất ổn nhưng mình có một câu hỏi: Nếu trong các tệp dữ liệu đó có nhiều hơn một sheet thì làm thế nào để chỉ cập nhật dữ liệu từ sheet cô định?
 
Upvote 0
Mình thấy bạn làm rất ổn nhưng mình có một câu hỏi: Nếu trong các tệp dữ liệu đó có nhiều hơn một sheet thì làm thế nào để chỉ cập nhật dữ liệu từ sheet cô định?
Giả sử bạn cần lấy dữ liệu từ Sheet "abc". Khi đó, bạn thêm câu lệnh
PHP:
Sheets("abc").Select
vào sau 2 câu lệnh
PHP:
Wb.Activate
(1 câu ngoài For, 1 câu trong For)
 
Upvote 0
Mình loay hoay hoài mà vẫn chưa làm được, cứ báo lỗi hoài
Phiền bạn viết giùm mình code để nối 3 file này lại nha !
 

File đính kèm

  • Group 1.xls
    85 KB · Đọc: 24
  • Group 2.xls
    83.5 KB · Đọc: 12
  • Group 3.xls
    82.5 KB · Đọc: 11
Upvote 0
nhân tiện em nhờ các cao thủ chỉ giáo hộ em, em nghĩ mãi vẫn chưa ra
em có 3 file cân đối vcb,vib,mhb em muốn tổng hợp thành các chỉ tiêu như trong file taocdketoan thì phải làm sao ạ
đây là link của 4 file trên:http://www.mediafire.com/?kzdimcmzzle
mong các bác giúp em với ạ.Thanks
 
Upvote 0
cả nhà help em với, em đang rất cần ạ

Mã:
[COLOR=#000000][COLOR=#007700]Private [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long
Sub GetData[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]FolderName [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700])
    [/COLOR][COLOR=#0000BB]Dim File [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Scripting[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]File[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SubFolder [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Scripting[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Folder
    Dim ThisWb [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Workbook[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]FindWb [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Workbook
    
    Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ScreenUpdating [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]False
    Set ThisWb [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]ThisWorkbook
    
    On Error Resume Next
    With [/COLOR][COLOR=#007700]New [/COLOR][COLOR=#0000BB]Scripting[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]FileSystemObject
        With [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]GetFolder[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]FolderName[/COLOR][COLOR=#007700])
            For [/COLOR][COLOR=#0000BB]Each File In [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Files
                [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]InStr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]File[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Name[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"xls"[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Then
                    Set FindWb [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Workbooks[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Open[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]File[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Path[/COLOR][COLOR=#007700])
                    [/COLOR][COLOR=#0000BB]With ThisWb[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])
                        .[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]FindWb[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Name
                        [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]FindWb[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A1"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value
                    End With
                    FindWb[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Close [/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]False[/COLOR][COLOR=#007700])
                    [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1
                End [/COLOR][COLOR=#007700]If
            [/COLOR][COLOR=#0000BB]Next File
            [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]Each SubFolder In [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]SubFolders
                Call GetData[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]SubFolder[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Path[/COLOR][COLOR=#007700])
            [/COLOR][COLOR=#0000BB]Next SubFolder
        End With
    End With
End Sub

Sub Run[/COLOR][COLOR=#007700]()
    [/COLOR][COLOR=#0000BB]Dim FolderName [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String
    i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1
    FolderName [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]InputBox[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Nhap duong dan toi thu muc chua cac file Excel can lay du lieu : "[/COLOR][COLOR=#007700])
    [/COLOR][COLOR=#0000BB]Call GetData[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]FolderName[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]End Sub
em mới học VBA các bác giải thích hộ cho em đoạn code trên với ạ, em xin cảm ơn
[/COLOR][/COLOR]

Lưu ý: nhớ đưa vào tab [ code]...đoạn mã...[ /code]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Các bạn ơi! Mình có một file bảng lương và phiếu lương. Mình muốn dữ liệu của Bảng lương và Phiếu lương thống nhất với nhau. Nghĩa là khi làm xong bảng lương thì phiếu lương cũng xong luôn thì phải làm thế nào? Giúp mình với! Cảm ơn thật nhiều!
 
Upvote 0
Các bước thực hiện:

_ Xuất các tập tin cần lấy dữ liệu vào một thư mục.
_ Mở tập tin CombineFiles.xls
_ Thực hiện thủ tục: MergeFiles
Vậy là xong.

Xem tập tin đính kèm tôi đã làm cho bạn rồi.

Lê Văn Duyệt

Ps: Hôm nào lên Bắc Giang chơi mới được.
 

File đính kèm

  • CombineFiles.zip
    22 bytes · Đọc: 588
Upvote 0
Xin được giúp đỡ !

Vào đọc bài này minh thấy rất hay và hữu ích đối với công việc của mình. Tuy nhiên mình chưa có điều kiện để tìm hiểu về VBA. Nhờ các cao thủ có thể viết cho mình đoạn code trong file tổng họp để tổng hợp các file trong tệp đính kèm được không . Mình xin cảm ơn !
 

File đính kèm

  • Tong hop.rar
    412.3 KB · Đọc: 194
Lần chỉnh sửa cuối:
Upvote 0
Tổng hợp dữ liệu nhiều file thành 1 file

Chà bài viết hay thiệt.
Em cũng trục trẹt về vấn đề tổng hợp dữ liệu đây, mong rằng nghiaphuc giúp em vụ này.

Em có rất nhiều file Excel xuất ra từ phần mềm HR mỗi file có 03 sheet với tên Sheet1, Sheet2, Sheet3 chỉ có Sheet1 là có dữ liệu thôi.
Mục đích là copy nội dung Sheet1 của tất cả các file rồi dán vào file tổng hợp với tên của Sheet là tên của các file tương ứng.

Cảm ơn trước.
 
Upvote 0
Web KT
Back
Top Bottom