Xin trợ giúp Tổng hợp khối lượng vật tư từ nhiều công trình (1 người xem)

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

vippmuhm

Thành viên mới
Tham gia
25/12/13
Bài viết
14
Được thích
1
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 !
 

File đính kèm

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 !

sheet tonghop trống trơn rồi chúng tôi biết làm gì với nó đây bạn ?
 
sheet tonghop trống trơn rồi chúng tôi biết làm gì với nó đây bạ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.
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.
 
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.
Chi tiết hơn em có thể ví dụ thế này:

Tên vật tư Khối lượng
Sheet1:
A 232
B 4234
C 345

Sheet2:
A 1313
C 6565
D 623
E 54662
sheet 3:
B 35435
C 8787
E 354
Tổng hợp sẽ là:
A 232+1313
B 4234+35435
C 345+6565+8787
D 623
E 54662+354
 
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 !
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
 
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ác có thể giúp em thêm cái cột giá thông báo vào nữa không?
 
Bạn xem file đính kèm bổ sung giá thông báo
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:

Public Sub TongHopVatTu()
Dim Ws As Worksheet, DL, kq(1 To 65000, 1 To 7), 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, 2)) Then
i = i + 1
.Add DL(r, 2), i
kq(i, 1) = i
kq(i, 2) = DL(r, 2)
kq(i, 3) = DL(r, 3)
kq(i, 4) = DL(r, 4)
kq(i, 5) = DL(r, 5)
kq(i, 6) = DL(r, 7)
Else
kq(.Item(DL(r, 2)), 5) = kq(.Item(DL(r, 2)), 5) + DL(r, 5)
End If
Next r


End If
Next Ws
End With


With Sheet1
.UsedRange.Clear
.Range("A1").Resize(i, 6) = kq
.UsedRange.Font.Name = ".vntime"
.UsedRange.Borders.LineStyle = 1
.UsedRange.Columns.AutoFit
End With
End Sub

Em sửa cái điều kiện tìm kiếm theo Mã Vật tư cho độ chính xác cao hơn, mà 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 đó?
 
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
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom