Code VBA tổng hợp dữ liệu nhiều sheet vào 1 sheet

Liên hệ QC

hungvinhhao

Thành viên mới
Tham gia
19/1/08
Bài viết
28
Được thích
1
Em có 1 file báo cáo như file đính kèm. Mỗi mỗi ngày tương ứng với 1 sheet. Các sheet có cấu trúc giống nhau. Sheet "TONGHOP" là tổng hợp dữ liệu của các sheet để báo cáo tháng. Em không biết về VBA lắm mà tổng hợp thủ công thì file chạy chậm. Em nhờ các tiền bối giúp em viết code VBA để:
1 - Hàng Ngày em vào dữ liệu ở các sheet (Sheet 1 .......sheet 31) thì dữ liệu tự cập nhật vào sheet " TONGHOP". Vùng dữ liệu i3:U5000 là tổng Sum (sheet1:sheet 31). với điều kiện đúng mã cửa hàng và mặt hàng.
2 - Khi chèn thêm cột, hoặc dòng ở bất kỳ sheet nào (sheet1,....sheet31) thì ở Sheet "TONGHOP" cũng tự động được chèn thêm đúng như nội dung được thêm vào ở sheet đó và dữ liệu cũng được cập nhật như bước 1.
Rất mong các bậc tiền bối giúp đỡ. Em cảm ơn nhiều.
Ghi chú: Em cũng đã làm theo theo cách dùng code copy dữ liệu các sheet thành 1 sheet nhưng nó lại copy luôn dư liệu của cả sheet "TONGHOP". Mà hơn nữa khi dùng hàm SUMIF tại sheet TONGHOP để cập nhật dữ liệu thì file chạy rất chậm.
Nếu không viết được code theo yêu cầu ở trên thì các tiền bối cho em xin code để mình copy dữ liệu từ sheet 1 đến sheet 31 sang 1 sheet mới. Không copy dữ liệu của sheet TONGHOP. Và code VBA để tổng hợp dữ liệu từ Sheet mới sang Sheet TONGHOP để em không phải dùng hàm SUMIF. Hàm SUMIF chạy rất chậm. Em dùng excel 2003.
 

File đính kèm

  • TONGHOP.rar
    13.5 KB · Đọc: 474
File của bạn chỉ là 32 cái Form, chả có số liệu minh họa gì cả thì biết sao lần?!

Mà có khi có số liệu thì bạn sẽ được góp í là 31 trang sẽ là không thích hợp.
Bạn có thể nghĩ đến cách 31 trang đó gôm lại thành 1 trang thôi;
Tất nhiên lúc đó sẽ tăng lên thêm vài trường; Nhưng như vậy sẽ thích hợp hơn với excel.

Tên trang tính vẫn còn dài, nhưng có gần chục tên vẫn là ngắn; Nên là S01, S02,. . . , S09, S10,. . . ,S31. Có vậy mới thích nghi với VBA
 
Upvote 0
Vì em sợ nội dung lớn quá nên bỏ bớt số liệu. File của em nếu có số liệu sẽ như file đính kèm. Còn việc đặt S01......, S31 cũng không ảnh hưởng.Vieecj 31 trang gộp lại thành 1 trang thì em cũng đã nêu ở phần cuối. Nhưng em dùng lệnh copy cả 31 sheet san 1 sheet thì nó lại copy luôn cả sheet tổng hợp. Nếu copy thành 1 sheet thì mong tiền bối ChanhTQ@ sửa cho em cái code copy để nó không copy tất cả các sheet mà chỉ copy Sheet1 đến sheet 31. vaf code vba tương đươngg hàm sumif. Em cảm ơn nhiều!
 
Upvote 0
Đây là file có dữ liệu của em ạ!
 

File đính kèm

  • Form Tracking Plus Super Pg.rar
    77.6 KB · Đọc: 528
Upvote 0
chưa có tiền bối nào giúp được em ạ? Nếu không viết được code theo đề nghị của em thì cho em code VBA tương đương như hàm SUMIF() và code copy các sheet thành 1 Sheet ( không copy sheet "TONGHOP" ). Em cảm ơn nhiều!
 
Upvote 0
Em có 1 file báo cáo như file đính kèm. Mỗi mỗi ngày tương ứng với 1 sheet. Các sheet có cấu trúc giống nhau. Sheet "TONGHOP" là tổng hợp dữ liệu của các sheet để báo cáo tháng. Em không biết về VBA lắm mà tổng hợp thủ công thì file chạy chậm. Em nhờ các tiền bối giúp em viết code VBA để:
1 - Hàng Ngày em vào dữ liệu ở các sheet (Sheet 1 .......sheet 31) thì dữ liệu tự cập nhật vào sheet " TONGHOP". Vùng dữ liệu i3:U5000 là tổng Sum (sheet1:sheet 31). với điều kiện đúng mã cửa hàng và mặt hàng.
2 - Khi chèn thêm cột, hoặc dòng ở bất kỳ sheet nào (sheet1,....sheet31) thì ở Sheet "TONGHOP" cũng tự động được chèn thêm đúng như nội dung được thêm vào ở sheet đó và dữ liệu cũng được cập nhật như bước 1.
Rất mong các bậc tiền bối giúp đỡ. Em cảm ơn nhiều.
Ghi chú: Em cũng đã làm theo theo cách dùng code copy dữ liệu các sheet thành 1 sheet nhưng nó lại copy luôn dư liệu của cả sheet "TONGHOP". Mà hơn nữa khi dùng hàm SUMIF tại sheet TONGHOP để cập nhật dữ liệu thì file chạy rất chậm.
Nếu không viết được code theo yêu cầu ở trên thì các tiền bối cho em xin code để mình copy dữ liệu từ sheet 1 đến sheet 31 sang 1 sheet mới. Không copy dữ liệu của sheet TONGHOP. Và code VBA để tổng hợp dữ liệu từ Sheet mới sang Sheet TONGHOP để em không phải dùng hàm SUMIF. Hàm SUMIF chạy rất chậm. Em dùng excel 2003.
Thử code này coi sao. Trúng trật gì thì từ từ tính tiếp
PHP:
Sub tong_hop()
Dim Source(), Result(1 To 10000, 1 To 21)
Dim Dic As Object, I As Long, j As Long, k As Long, n As Byte
Set Dic = CreateObject("scripting.dictionary")
For n = 1 To 31
    With Sheets("sheet" & n)
        Source = .Range(.[A3], .[A65536].End(3)).Resize(, 21).Value
    End With
    For I = 1 To UBound(Source)
        If Source(I, 2) <> "" Then
            If Not Dic.exists(Source(I, 2)) Then
                k = k + 1
                Dic.Add Source(I, 2), k
                Result(k, 1) = k
                For j = 2 To 21
                    Result(k, j) = Source(I, j)
                Next
            Else
                c = Dic.Item(Source(I, 2))
                For j = 9 To 21
                    Result(c, j) = Result(c, j) + Source(I, j)
                Next
            End If
        End If
    Next
Next
For j = 8 To 21
    Result(k + 1, j) = "=SUM(R3C:R[-1]C)"
Next
Sheets("TONGHOP").[A3].Resize(k + 1, 21) = Result
End Sub
 
Upvote 0
Code này ổn luôn anh ạ. Em cảm ơn anh nhiều nhiều! Nhờ code này mà bây giờ khối lượng công việc của em sẽ đỡ đi nhiều. Nhân đây em xin anh Quanghai1969 code copy dữ liệu từ Sheet 1 đến sheet 31 sang một sheet mới được không ạ. Và em còn vướng trường hợp này nữa. Ở file em gửi lên diễn đàn ở cột F (Ho Ten NV ) trong tháng có thể đứng ở các cửa hàng khác nhau ( không cố định ). Em cũng muốn tổng hợp số liệu như Sheet " TONGHOP" ở trên nhưng theo Ho Ten NV sang sheet " THNV" Thì sửa code trên như thế nào anh nhỉ. Em nhờ anh giúp với. em cảm ơn anh nhiều!
 
Upvote 0
File của em đây ạ. anh Quanghai1969 xem và viết code vba giúp em với anh nhé!
 

File đính kèm

  • Form Tracking Plus Super Pg.rar
    80.4 KB · Đọc: 168
Upvote 0
Mấy bác giúp e cái này nhá.
VD: e có 2 file là BCA và TH, trong BCA có 3 sheet là T1, T2, T3. E muốn tổng hợp T1, T2, T3 của BCA vào TH, dữ liệu nào trùng thì lấy 1 thôi, k trùng thì vẫn lấy. Nếu dùng công thức thì dùng thế nào, còn nếu dùng VBA thì viết thế nào?
Thank các bác trước!
 

File đính kèm

  • Folder.rar
    3.2 KB · Đọc: 172
Upvote 0
Mấy bác giúp e cái này nhá.
VD: e có 2 file là BCA và TH, trong BCA có 3 sheet là T1, T2, T3. E muốn tổng hợp T1, T2, T3 của BCA vào TH, dữ liệu nào trùng thì lấy 1 thôi, k trùng thì vẫn lấy. Nếu dùng công thức thì dùng thế nào, còn nếu dùng VBA thì viết thế nào?
Thank các bác trước!
Sau sheet T3, bạn thêm một sheet tên TH rồi dùng code trên
PHP:
Sub copy()
Dim Ws As Worksheet, Sarr, Arr(1 To 65000, 1 To 1), i As Long, k As Long
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
For Each Ws In Worksheets
    If Ws.Name <> "TH" Then
        Sarr = Ws.Range("A1", Ws.[A65000].End(xlUp)).Resize(, 1).Value2
            For i = 1 To UBound(Sarr, 1)
                If Not Dic.exists(Sarr(i, 1)) Then
                    k = k + 1
                    Dic.Add Sarr(i, 1), k
                    Arr(k, 1) = Sarr(i, 1)
                End If
            Next
    End If
Next
With Sheets("TH")
    .[A1:A65000].ClearContents
    .[A1].Resize(k, 1).Value = Arr
    .[A1].Resize(k, 1).Borders.LineStyle = 1
End With
Set Dic = Nothing
End Sub
 
Upvote 0
truoc tien mih xin cam on ban comet_1701 rat nhieu! Minh muon file TH nam wordsheet rieng de sau nay con tong hop cac file khac nhu: BCB, BCC, BCD... va cho minh hoi them la khi thay doi du lieu o cac sheet trong BCA thi du lieu trong file TH co thay doi k?
 
Lần chỉnh sửa cuối:
Upvote 0
Bài viết tiếng Việt fải có dấu.

Câu này dù có dấu tiếng Việt cũng sẽ khó hiểu: "Minh muon file TH nam wordsheet rieng de sau nay con tong hop cac file khac nhu: BCB, BCC, BCD..."
 
Upvote 0
ý mình là sheet TH phải nằm riêng biệt ở worksheet khác chứ k thêm vào sau sheet T3, đoạn mã của bạn comet_1701 chỉ hiện dữ liệu k trùng còn dữ liệu trùng thì k hiện, mình muốn hiển thị tất cả giống như file TH mình đính kèm, thank!
 
Lần chỉnh sửa cuối:
Upvote 0
chưa có bác nào giúp mình hết,-\\/.
 
Upvote 0
Các bác giúp dùm e nhé, gửi bài viết lâu rồi mà chưa có ai giúp hết
 
Upvote 0
Anh Quanhhai1969 ơi anh giúp em file này được không ạ, Em có 1 file báo cáo như file đính kèm. Mỗi mỗi ngày tương ứng với 1 sheet. Các sheet có cấu trúc giống nhau. Sheet "TONGHOP" là tổng hợp dữ liệu của các sheet. Em không biết về VBA lắm mà tổng hợp thủ công thì file chạy chậm. Em nhờ các anh ch giúp em viết code VBA để: Hàng Ngày em vào dữ liệu ở các sheet (Sheet 1 .......> sheet 31) thì dữ liệu tự cập nhật vào sheet " TONGHOP".
 

File đính kèm

  • BAN VE TP Thang07.rar
    119.1 KB · Đọc: 74
Upvote 0
Nhờ các anh chị giúp em tạo một code vba làm sao em có thể tự động lấy dữ liệu từ các sheet sang sheet tổng hợp, đống thời nếu dữ liệu của nhưng sheet kia thay đổi thì nó sẽ tự động thay đổi dự liệu ở sheet tổng hợp. em có gửi file đính kèm. nhờ các anh chị giúp đỡ, em cảm ơn nhiều.
 

File đính kèm

  • gui giai phap excel.xls
    96.5 KB · Đọc: 103
Upvote 0
Nhờ các anh chị giúp em tạo một code vba làm sao em có thể tự động lấy dữ liệu từ các sheet sang sheet tổng hợp, đống thời nếu dữ liệu của nhưng sheet kia thay đổi thì nó sẽ tự động thay đổi dự liệu ở sheet tổng hợp. em có gửi file đính kèm. nhờ các anh chị giúp đỡ, em cảm ơn nhiều.
Muốn cập nhật thì chạy code, tự động chạy khi có sự thay đổi của các khác chưa làm được
Mã:
Sub TongHop()
Dim i As Long, lR As Long
Application.ScreenUpdating = False
Sheets("TONGHOP").Move before:=Sheets(1)
Sheets("TONGHOP").Range("A3:H" & Sheets("TONGHOP").Range("B3").End(xlDown).Row).Clear
For i = 2 To Sheets.Count
    lR = Sheets("TONGHOP").Cells.Find("*", SearchDirection:=xlPrevious).Row + 1
    With Sheets(i)
        .Range("A3:H" & .Range("B3").End(xlDown).Row).Copy Sheets("TONGHOP").Cells(lR, 1)
    End With
Next
With Sheets("TONGHOP")
    For i = 3 To .Range("B3").End(xlDown).Row
        If .Cells(i, 1) = "" Then .Cells(i, 1) = .Cells(i - 1, 1) + 1
    Next i
.Range("A3:H" & .Range("B3").End(xlDown).Row).Borders.LineStyle = 1
End With
ActiveWorkbook.Worksheets("tonghop").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("tonghop").Sort.SortFields.Add Key:=Range("A3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("tonghop").Sort
    .SetRange Range("A3:h196")
    .Apply
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
chẳng nhẻ không có cách nào vừa lấy dữ liệu vừa limk được ư.nhờ mọi người giúp với nhé.
 
Upvote 0
Web KT
Back
Top Bottom