Xin code tự động tổng hợp dữ liệu từ sheet chi tiết vào sheet Tổng hợp và tính tổng (1 người xem)

  • Thread starter Thread starter quanyb
  • Ngày gửi Ngày gửi
Liên hệ QC

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

quanyb

Thành viên mới
Tham gia
9/4/15
Bài viết
9
Được thích
0
Em mới tập tọe VBA thấy rất hay nhưng do khả năng có hạn, không biết làm thế nào nên nhờ các bác GPE giúp em với:
1. Em có rất nhiều mặt hàng của nhiều hãng khác nhau (tivi, tủ lạnh, máy giặt,…của LG, Samsung, sony..), được xuất theo các đơn hàng. Em đã tách riêng các dòng sản phẩm ra thành các sheet. Bây giờ em muốn xin code để tại sheet TONG HOP sẽ tự động liệt kê từng đơn hàng của từng hãng (như trong sheet tonghop em gửi kèm). Vì các đơn hàng liên tục trong năm nên em muốn sheet TONGHOP cũng được update theo các sheet phụ đó.
2. Tại sheet TONGHOP em muốn tính tổng giá trị của đơn hàng, hiện tại e dùng hàm sumifs tuy nhiên do dữ liệu trong năm của em rất lớn mà mỗi lần cập nhật các đơn hàng mới nên việc tính toán lại tại sheet TONGHOP (tại column C) rất lâu, vì thế các bác giúp em cái code nào để việc tính toán tại sheet TONGHOP sau khi update các đơn hàng mới nhanh hơn với ạ.
 

File đính kèm

Chào bác hpkhuong..
Bác cho e hỏi là e có 1 file excel như trong tệp đính kèm. sheet tồn là vùng dữ liệu e nhập vào từ đầu. sheet Xuất là e có ghi ngày xuất, mã hàng và size số tương ứng với sheet tồn. Giờ có cách nào khi e nhập vào sheet Xuất Mã hàng, size hàng thì ở sheet tồn sẽ tự động trừ đi tương ứng không ạ. E cảm ơn bác nhiều!!
 

File đính kèm

Upvote 0
Chào bác hpkhuong..
Bác cho e hỏi là e có 1 file excel như trong tệp đính kèm. sheet tồn là vùng dữ liệu e nhập vào từ đầu. sheet Xuất là e có ghi ngày xuất, mã hàng và size số tương ứng với sheet tồn. Giờ có cách nào khi e nhập vào sheet Xuất Mã hàng, size hàng thì ở sheet tồn sẽ tự động trừ đi tương ứng không ạ. E cảm ơn bác nhiều!!}}}}}}}}}}}}}}}
 
Upvote 0
Rất cảm ơn Bác hpkhuong đã nhiệt tình giúp e đoạn code này ạ. Bác có thể giúp e chỉnh lại trong code đoạn lấy tổng dựa trên dòng trong sheet chi tiết có chữ "SERI" được không ạ, vì thực tế trong quá trình nhập cũng có rất nhiều trường hợp không theo seri ạ, Em có ý tưởng là dùng sumifs đối với cột "hãng" và "đơn hàng" theo từng sheet chi tiết, tại sheet TONGHOP chia 2 sẽ ra số chính xác.
 
Upvote 0
Bạn fải lưu ý:
1. Tại sheet tong hop Luôn luôn cố định tiêu đề của 3 cột A, B, C (tương ứng với tên hãng, đơn hàng, Tống
2. Từ cột D trở đi bạn gõ tên tivi, tủ lạnh gì đó....ra các cột phía sau cho tương ứng với số mặt hàng của bạn. Lưu ý bạn đặt tên sheet là mặt hàng tivi hay tủ lạnh...thì tên tự cột D trở về phía sau phải đặt tương ứng theo tên sheet mặt hàng... (như bạn đang làm)
3. Tại các sheet tivi, tủ lạnh...: Mặc nhiên hiểu là lấy dòng tổng, dòng có chữ Seri làm điều kiện lấy lên tổng hợp...:cho nên bạn fải theo format này mà nhập liệu cho đúng thì code mới chạy chính xác được...
4. Code làm việc sẽ dán kết quả vào dòng thứ 2 trở đi...

Mã:
Option Explicit
Public Sub GPE()
Dim Dic As Object, I As Long, K As Long, tArr, J As Long
Dim Tmp As String, Arr, dArr, Ws As Worksheet
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("tong hop")
    tArr = .Range("D1", .Range("D1").End(2)).Value
    ReDim dArr(1 To 10000, 1 To UBound(tArr, 2) + 3)
For Each Ws In Worksheets
If UCase(Ws.Name) <> "TONG HOP" Then
    Arr = Ws.UsedRange.Value
    For I = 2 To UBound(Arr)
    If UCase(Arr(I, 2)) Like "SERI*" Then
    Tmp = Arr(I, 3) & "_" & Arr(I, 4)
        If Not Dic.Exists(Tmp) Then
            K = K + 1
            Dic.Add Tmp, K
            dArr(K, 1) = Arr(I, 3)
            dArr(K, 2) = Arr(I, 4)
            dArr(K, 3) = Arr(I, 5)
            For J = 1 To UBound(tArr, 2)
                If UCase(Ws.Name) = UCase(tArr(1, J)) Then
                    dArr(K, J + 3) = Arr(I, 5)
                End If
            Next J
        Else
            dArr(Dic.Item(Tmp), 3) = dArr(Dic.Item(Tmp), 3) + Arr(I, 5)
            For J = 1 To UBound(tArr, 2)
                If UCase(Ws.Name) = UCase(tArr(1, J)) Then
                    dArr(Dic.Item(Tmp), J + 3) = dArr(Dic.Item(Tmp), J + 3) + Arr(I, 5)
                End If
            Next J
        End If
    End If
    Next I
End If
Next Ws
    .Range("A1").CurrentRegion.Offset(1).ClearContents
    .Range("A2").Resize(K, UBound(tArr, 2) + 3) = dArr
End With
Set Dic = Nothing
End Sub

Rất cảm ơn Bác hpkhuong đã nhiệt tình giúp e đoạn code này ạ. Bác có thể giúp e chỉnh lại trong code đoạn lấy tổng dựa trên dòng trong sheet chi tiết có chữ "SERI" được không ạ, vì thực tế trong quá trình nhập cũng có rất nhiều trường hợp không theo seri ạ, Em có ý tưởng là dùng sumifs đối với cột "hãng" và "đơn hàng" theo từng sheet chi tiết, tại sheet TONGHOP chia 2 sẽ ra số chính xác.
 
Upvote 0
Sorry, mình đăng nhầm box, nhờ mod xoá bài hộ
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom