Chào các bác!
Vấn đề của em là thế này.
Em cần lên danh mục vật tư tổng hợp từ nhiều công trình khác nhau mà lại không biết cách làm, các bác giúp em với.
File đính kèm của em dưới đây, các bác giúp em.
Xin cảm ơn !
Vì em không biết làm thế nào để nhặt được danh mục vật tư sang bảng tổng hợp nên em để trống đó bác.sheet tonghop trống trơn rồi chúng tôi biết làm gì với nó đây bạn ?
Chi tiết hơn em có thể ví dụ thế này:Vì em không biết làm thế nào để nhặt được danh mục vật tư sang bảng tổng hợp nên em để trống đó bác.
Bảng tổng hợp thì giống hệt các bảng chi tiết, chỉ là cộng tất cả khối lượng vật tư cùng loại với nhau.
Tổng hợp theo tên vật tưChào các bác!
Vấn đề của em là thế này.
Em cần lên danh mục vật tư tổng hợp từ nhiều công trình khác nhau mà lại không biết cách làm, các bác giúp em với.
File đính kèm của em dưới đây, các bác giúp em.
Xin cảm ơn !
Public Sub TongHopVatTu()
Dim Ws As Worksheet, DL, kq(1 To 65000, 1 To 4), r As Long, i
With CreateObject("scripting.dictionary")
For Each Ws In Worksheets
If Ws.Name <> "Tong hop" Then
DL = Ws.Range("A8", Ws.Range("I65000").End(xlUp))
For r = 1 To UBound(DL)
If Not .exists(DL(r, 3)) Then
i = i + 1
.Add DL(r, 3), i
kq(i, 1) = i
kq(i, 2) = DL(r, 3)
kq(i, 3) = DL(r, 4)
kq(i, 4) = DL(r, 5)
Else
kq(.Item(DL(r, 3)), 4) = kq(.Item(DL(r, 3)), 4) + DL(r, 5)
End If
Next r
End If
Next Ws
End With
With Sheet4
.UsedRange.Clear
.Range("A1").Resize(i, 4) = kq
.UsedRange.Font.Name = ".vntime"
.UsedRange.Borders.LineStyle = 1
.UsedRange.Columns.AutoFit
End With
End Sub
Bác có thể giúp em thêm cái cột giá thông báo vào nữa không?Tổng hợp theo tên vật tư
Mã:Public Sub TongHopVatTu() Dim Ws As Worksheet, DL, kq(1 To 65000, 1 To 4), r As Long, i With CreateObject("scripting.dictionary") For Each Ws In Worksheets If Ws.Name <> "Tong hop" Then DL = Ws.Range("A8", Ws.Range("I65000").End(xlUp)) For r = 1 To UBound(DL) If Not .exists(DL(r, 3)) Then i = i + 1 .Add DL(r, 3), i kq(i, 1) = i kq(i, 2) = DL(r, 3) kq(i, 3) = DL(r, 4) kq(i, 4) = DL(r, 5) Else kq(.Item(DL(r, 3)), 4) = kq(.Item(DL(r, 3)), 4) + DL(r, 5) End If Next r End If Next Ws End With With Sheet4 .UsedRange.Clear .Range("A1").Resize(i, 4) = kq .UsedRange.Font.Name = ".vntime" .UsedRange.Borders.LineStyle = 1 .UsedRange.Columns.AutoFit End With End Sub
Bạn xem file đính kèm bổ sung giá thông báoBác có thể giúp em thêm cái cột giá thông báo vào nữa không?
Sau một hồi mò mẫm học vẹt theo code của bác, em sửa lại thế này:Bạn xem file đính kèm bổ sung giá thông báo
hình như hàm .exists có phân biệt chữ HOA - thường phải ko bác?
Với lệnh With Sheet4 thì có sử dụng lệnh nào tương đương để chỉ rõ là Sheet "Tổng hợp" không bác? Vì nhiều khi nó không phải là Sheet4 mà có thể là Sheet x nào đó?
.exists là phương thức của dictionary. Bạn tìm hiểu tại đây cho chủ động
http://www.giaiphapexcel.com/forum/showthread.php?60643-Tổng-quan-về-Scripting-Dictionary
Lệnh with sheet4 => with sheets("Tổng hợp") theo ví dụ của bạn
---
Có thể thêm điều kiện lọc khối lượng <> rỗng cho gọn