Tổng hợp dữ liệu từ các sheet (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thanhduan2407

Thành viên mới
Tham gia
22/9/08
Bài viết
15
Được thích
2
Chào các anh/chị/em trên diễn đàn giaiphapexcel.com!
Chả là em dạo này mê muội sang khoản VBA for Excel nhưng kiến thức về nó chưa nhiều và chưa tự mình viết một ứng dụng cho mảng này được. Em đang tự học và nghiên cứu một số bài toán trong excel, mong rằng sau này tự viết được ứng dụng để giải quyết công việc được nhanh hơn.
Em có một người bạn biết em đang mò mẫm Excel nên nhờ em viết Code cho file dữ liệu này, gọi là vừa làm vừa học, nhưng em chưa biết bắt đầu từ đâu? Trước lạ sau quen, em mong các anh/chị/em giải dùm em bài toán này với file dữ liệu:
http://www.mediafire.com/?nqy1adbfsq3d4s5
Em đã nghiên cứu 3 ngày nhưng chưa biết phương thức để làm việc với nó, kiến thức VBA for Excel của em còn non nên mong các anh/chị/em viết Code dùm.
(về kiến thức lập trình thì em biết một chút về VBA for Autocad, VB6, Autolisp nên ngôn ngữ này em nghĩ sẽ học nhanh thôi)
Cảm ơn anh/chị/em rất nhiều.
Mô tả dữ liệu:
Trong file dữ liệu em gửi thì trong mỗi sheet em đều có các dữ liệu theo mã sản phẩm theo các năm. Nhờ các viết Code sao cho kết quả giống sheet cuối cùng là sheet tổng hợp tất cả các sheet trước.
 
Tôi thấy dữ liệu trong các Sheet của bạn đồng nhất, Cột mã số giống nhau về thứ tự sắp xếp của các sheet. Tôi đưa ra phương án đơn giản nhất tương ứng với kiểu dữ liệu đó hy vọng bạn dễ tiếp cận hơn. Nếu có sự xáo trộn thứ tự mã số hoặc không đồng nhất mã số thì phải nghĩ tới phương án khác (Dictionary hoặc ADO...).
Mã:
Sub Tonghop()
    Dim iR As Long
    Dim jC As Long
    Dim k As Long
    Dim Col As Long
    Dim sh As Worksheet
    Dim Arr
    Dim Res(1 To 65536, 1 To 11)
    Col = 2
    'Duyet 1 vong cac Sheet
    For Each sh In ThisWorkbook.Worksheets
        'Neu ten Sheet khac ten sheet chua ket qua
        If sh.Name <> "Sheet1" Then
            k = 1
            Col = Col + 1
            Res(k, Col) = sh.Name
            'Gan vung du lieu tai sh vao mang de xu ly
            Arr = sh.Range("A1:E" & sh.Range("E65536").End(3).Row)
            For iR = 2 To UBound(Arr, 1)
                For jC = 2 To UBound(Arr, 2)
                    k = k + 1
                    Res(k, 1) = Arr(1, jC)         'Year
                    Res(k, 2) = Arr(iR, 1)         'MCT
                    Res(k, Col) = Arr(iR, jC)      'Du lieu
                Next
            Next
        End If
    Next
    'Gan du lieu
    Sheet9.Range("L1").Resize(k, 10) = Res
End Sub
 
Upvote 0
Tôi thấy dữ liệu trong các Sheet của bạn đồng nhất, Cột mã số giống nhau về thứ tự sắp xếp của các sheet. Tôi đưa ra phương án đơn giản nhất tương ứng với kiểu dữ liệu đó hy vọng bạn dễ tiếp cận hơn. Nếu có sự xáo trộn thứ tự mã số hoặc không đồng nhất mã số thì phải nghĩ tới phương án khác (Dictionary hoặc ADO...).
Mã:
Sub Tonghop()
    Dim iR As Long
    Dim jC As Long
    Dim k As Long
    Dim Col As Long
    Dim sh As Worksheet
    Dim Arr
    Dim Res(1 To 65536, 1 To 11)
    Col = 2
    'Duyet 1 vong cac Sheet
    For Each sh In ThisWorkbook.Worksheets
        'Neu ten Sheet khac ten sheet chua ket qua
        If sh.Name <> "Sheet1" Then
            k = 1
            Col = Col + 1
            Res(k, Col) = sh.Name
            'Gan vung du lieu tai sh vao mang de xu ly
            Arr = sh.Range("A1:E" & sh.Range("E65536").End(3).Row)
            For iR = 2 To UBound(Arr, 1)
                For jC = 2 To UBound(Arr, 2)
                    k = k + 1
                    Res(k, 1) = Arr(1, jC)         'Year
                    Res(k, 2) = Arr(iR, 1)         'MCT
                    Res(k, Col) = Arr(iR, jC)      'Du lieu
                Next
            Next
        End If
    Next
    'Gan du lieu
    Sheet9.Range("L1").Resize(k, 10) = Res
End Sub
Tuyệt vời, không còn gì em cảm thấy tuyệt vời hơn.
Cảm giác này giống như với cảm giác lần đầu em viết được chương trình ứng dụng Autolisp trong Autocad.
Cảm ơn anh rất nhiều nhé.
Cảm ơn anh đồng hương nhiều lắm
 
Upvote 0
Chào Anh dhn46!
Thấy đoạn code của anh dhn46 hay lắm, anh có thể giải thích chi tiết để em có thể hiểu rõ hơn được không
Cám ơn anh nhiều
 
Upvote 0
Chào Anh dhn46!
Thấy đoạn code của anh dhn46 hay lắm, anh có thể giải thích chi tiết để em có thể hiểu rõ hơn được không
Cám ơn anh nhiều
Bạn cũng mới học VBA à?
Mã Code đơn giản và dễ hiểu.
Nếu anh dhn46 bận thì mình có thể trả lời thay anh ấy ^^
Bạn hỏi chỗ nào vậy?
Nhưng trước tiên bạn download file mình gửi về để xem hình thức đã
 
Upvote 0
Cám ơn bạn, mình dùng VBA cũng một thời gian nhưng cách viết code thì có nhiều cách, thấy code của anh dhn46 hay nên mình hỏi để rõ hơn.
Mình xem va hiểu một phần đó bạn thanhduan247.
Vì code cũng ít nên bạn có thể giải thích từ dòng Res(k,col) = sh.Name trở về sau để mình có thể áp dụng code vào các trường hợp tương tự
Một lần nữa, cám ơn thanhduan247
 
Upvote 0
Trong vòng lặp
For Each sh In ThisWorkbook.Worksheets
thì duyệt từng sheet trong file Excel đó.
Lúc này k gắn bằng 1 (hàng 1), cột nhảy theo số sheet có trong file thì chèn tên sheet.
Mảng Res(k,col) là mảng được in ra trong sheet9 (file mẫu).
Nếu bạn biết VBA một tgian rồi chắc hẳn bạn biết thủ tục đó mà.
 
Upvote 0
Ok.Thanks thanhduan247.
Đúng ý rồi.Cám ơn bạn, hy vọng bạn sẽ có nhiều đóng góp cho diễn đàn
Chào!
 
Upvote 0

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

Back
Top Bottom