Dùng hàm SUMPRODUCT có điều kiện với mảng dữ liệu thay đổi (1 người xem)

Liên hệ QC

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

Trong Quyet

Thành viên mới
Tham gia
4/5/13
Bài viết
3
Được thích
0
Em có một vùng dữ liệu trong các sheet: "BOM", nó có thể sẽ được mở rộng xuống các dòng bên dưới.
Em đã sử dụng công thức SUMPROUCT có điều kiện để tính số lượng trong sheet "2.Loss_Demand" với vùng dữ liệu cố định như sau:

Sub LossDemand1()
'Tinh so luong Loss Demand'
Call TimCot
Sheets("2.Loss_Demand").Select
Range("E2").FormulaR1C1 = "=1.Main_Demand!RC"
With Worksheets("2.Loss_Demand")
Range("E2").AutoFill Destination:=.Range(.Cells(2, 5), .Cells(2, Cot + 1))
End With
Call DongLD
Call DongCB
Range("E3").Formula = "=EVEN(SUMPRODUCT(--(BOM!R3C3:R14C3='2.Loss_Demand'!RC3),BOM!R3C[1]:R14C[1],BOM!R3C4:R14C4,1/BOM!R3C5:R14C5))-SUMIF('1.Main_demand'!C3,'2.Loss_Demand'!RC3,'1.Main_demand'!C)"
Range("E3").AutoFill Destination:=Range("E3:E" & DgLD)
'Tim so cot trong sheet Main Demand'
Dim Cot1 As Long
Cot1 = 2
Do Until Sheets("2.Loss_Demand").Cells(2, Cot1 + 1).Value = ""
Cot1 = Cot1 + 1
Loop
With Worksheets("2.Loss_Demand")
Range("e3:e" & DgLD).AutoFill Destination:=.Range(.Cells(3, 5), .Cells(DgLD, Cot1))
End With
End Sub

Em đã sử dụng biến DgCB để tìm số dòng trong sheet "BOM".
Bây giờ em muốn sử dụng biến này trong công thức SUMPRODUCT có điều kiện, để tự động mở rộng mảng dữ liệu nhưng không được? (số dòng thay đổi)
Nếu như chọn tất cả cột thì công thức bị báo lỗi.
Em muốn dùng biến DgCB để tự động cập nhật dữ liệu khi thay đổi, chứ không phải sửa lại công thức
Mong các bác xem và hướng dẫn lại cho em với.
 

File đính kèm

Em có một vùng dữ liệu trong các sheet: "BOM", nó có thể sẽ được mở rộng xuống các dòng bên dưới.
Em đã sử dụng công thức SUMPROUCT có điều kiện để tính số lượng trong sheet "2.Loss_Demand" với vùng dữ liệu cố định như sau:

Sub LossDemand1()
'Tinh so luong Loss Demand'
Call TimCot
Sheets("2.Loss_Demand").Select
Range("E2").FormulaR1C1 = "=1.Main_Demand!RC"
With Worksheets("2.Loss_Demand")
Range("E2").AutoFill Destination:=.Range(.Cells(2, 5), .Cells(2, Cot + 1))
End With
Call DongLD
Call DongCB
Range("E3").Formula = "=EVEN(SUMPRODUCT(--(BOM!R3C3:R14C3='2.Loss_Demand'!RC3),BOM!R3C[1]:R14C[1],BOM!R3C4:R14C4,1/BOM!R3C5:R14C5))-SUMIF('1.Main_demand'!C3,'2.Loss_Demand'!RC3,'1.Main_demand'!C)"
Range("E3").AutoFill Destination:=Range("E3:E" & DgLD)
'Tim so cot trong sheet Main Demand'
Dim Cot1 As Long
Cot1 = 2
Do Until Sheets("2.Loss_Demand").Cells(2, Cot1 + 1).Value = ""
Cot1 = Cot1 + 1
Loop
With Worksheets("2.Loss_Demand")
Range("e3:e" & DgLD).AutoFill Destination:=.Range(.Cells(3, 5), .Cells(DgLD, Cot1))
End With
End Sub

Em đã sử dụng biến DgCB để tìm số dòng trong sheet "BOM".
Bây giờ em muốn sử dụng biến này trong công thức SUMPRODUCT có điều kiện, để tự động mở rộng mảng dữ liệu nhưng không được? (số dòng thay đổi)
Nếu như chọn tất cả cột thì công thức bị báo lỗi.
Em muốn dùng biến DgCB để tự động cập nhật dữ liệu khi thay đổi, chứ không phải sửa lại công thức
Mong các bác xem và hướng dẫn lại cho em với.

Em muốn bổ xung thêm cho câu hỏi của em bên trên như sau:
+ Em muốn dùng biến DgCB để thay cho Dòng 14 trong hàm Sumproduct bên trên: "EVEN(SUMPRODUCT(--(BOM!R3C3:R14C3='2.Loss_Demand'!RC3),BOM!R3C[1]:R14C[1],BOM!R3C4:R14C4,1/BOM!R3C5:R14C5))
Em vừa có xem lại để tài này SUM và SUMPRODUCT khác nhau điểm nào trong trường hợp này?

trong đó có đề tài từ trang: http://www.webketoan.vn/forum/threa...a-Cong-thuc-mang-Phep-tinh-co-nhieu-dieu-kien
thì đã thử dùng công thức này:
Range("E3").FormulaArray = _
"=EVEN(SUM(IF(BOM!C3='2.Loss_Demand'!RC3,BOM!C[1]*BOM!C4*(1/BOM!C5))))-SUMIF('1.Main_demand'!C3,'2.Loss_Demand'!RC3,'1.Main_demand'!C)"
Thay cho công thức bên trên thì kết quả đúng như mong muốn, nhưng có điều tốc độ chạy hơi chậm so với cách dùng công thức trên.
Vậy các bác cho em cách nào để cho công thức xử lý nhanh hơn không?
Theo em nhân định: Nếu như mình dùng được biến DgCB để lựa chọn vùng dữ liệu cho công thức SUMPRODUCT sẽ nhanh hơn.
Vậy mong các bác hướng dẫn cho em cách để sử dụng biến DgCB trong công thức SUMPRODUCT này với nhé.
 
Upvote 0

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

Back
Top Bottom