thanhdatngocrong
Thành viên mới
- Tham gia
- 27/4/11
- Bài viết
- 7
- Được thích
- 3
Dùng công thức mảng:Em dùng đủ mọi cách rồi nhưng không được,
Dùng thử code nàyEm dùng đủ mọi cách rồi nhưng không được,
Sub Sumproduct_()
Dim Arr1, Arr2, Arr3
Dim Res
Dim i As Long, j As Long
With Sheet1
Arr1 = .Range("a1").CurrentRegion
Arr2 = .Range("g1").CurrentRegion
Arr3 = .Range("m1").CurrentRegion
End With
With CreateObject("Scripting.Dictionary")
For i = 2 To UBound(Arr1)
For j = 2 To 4
If Arr1(i, j) <> "" Then
.Item(Arr1(i, j)) = .Item(Arr1(i, j)) + Arr1(i, 5)
End If
Next j
Next i
For i = 2 To UBound(Arr2)
For j = 2 To 3
If Arr2(i, j) <> "" Then
.Item(Arr2(i, j)) = .Item(Arr2(i, j)) + Arr2(i, 5)
End If
Next j
Next i
For i = 2 To UBound(Arr3)
For j = 2 To 3
If Arr3(i, j) <> "" Then
.Item(Arr3(i, j)) = .Item(Arr3(i, j)) + Arr3(i, 5)
End If
Next j
Next i
ReDim Res(1 To .Count, 1 To 2)
For i = 0 To .Count - 1
Res(i + 1, 1) = .keys()(i)
Res(i + 1, 2) = .items()(i)
Next i
End With
Sheet1.Range("w2").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Cảm ơn anh Phan Thế Hiệp, nhưng mình vần chưa hiểu vùng giá trị là như thế nào, anh có thể làm mẫu file excell giúp Đạt được không, cảm ơn anh nhiều...!!!!!!!Dùng công thức mảng:
=SUM ( ('Vùng 3 cột thứ 1' = 'Giá trị tìm ')* 'Cột giá trị thứ 1' , ('Vùng 3 cột thứ 2' = 'Giá trị tìm ') * 'Cột giá trị thứ 2' , ('Vùng 3 cột thứ 3' = 'Giá trị tìm ') * 'Cột giá trị thứ 3' ) kết thúc bằng Ctrl+Shift+Enter.
Thân
Cảm ơn bạn đã góp ý cho Đạt rất nhiều nhưng viết code Đạt dốt đặc cán mai, không biết làm sao, coppy như thế nào luônDùng thử code này
Mã:Sub Sumproduct_() Dim Arr1, Arr2, Arr3 Dim Res Dim i As Long, j As Long With Sheet1 Arr1 = .Range("a1").CurrentRegion Arr2 = .Range("g1").CurrentRegion Arr3 = .Range("m1").CurrentRegion End With With CreateObject("Scripting.Dictionary") For i = 2 To UBound(Arr1) For j = 2 To 4 If Arr1(i, j) <> "" Then .Item(Arr1(i, j)) = .Item(Arr1(i, j)) + Arr1(i, 5) End If Next j Next i For i = 2 To UBound(Arr2) For j = 2 To 3 If Arr2(i, j) <> "" Then .Item(Arr2(i, j)) = .Item(Arr2(i, j)) + Arr2(i, 5) End If Next j Next i For i = 2 To UBound(Arr3) For j = 2 To 3 If Arr3(i, j) <> "" Then .Item(Arr3(i, j)) = .Item(Arr3(i, j)) + Arr3(i, 5) End If Next j Next i ReDim Res(1 To .Count, 1 To 2) For i = 0 To .Count - 1 Res(i + 1, 1) = .keys()(i) Res(i + 1, 2) = .items()(i) Next i End With Sheet1.Range("w2").Resize(UBound(Res), UBound(Res, 2)) = Res End Sub
Chắc anh lại đang quánh bằng điện thoại.Dùng công thức mảng:
=SUM ( ('Vùng 3 cột thứ 1' = 'Giá trị tìm ')* 'Cột giá trị thứ 1' , ('Vùng 3 cột thứ 2' = 'Giá trị tìm ') * 'Cột giá trị thứ 2' , ('Vùng 3 cột thứ 3' = 'Giá trị tìm ') * 'Cột giá trị thứ 3' ) kết thúc bằng Ctrl+Shift+Enter
Chưa! khoảng 30' nữa mới dùng điện thoại oánh chữ.Chắc anh lại đang quánh bằng điện thoại.
Cảm ơn anh Phan Thế Hiệp, nhưng mình vần chưa hiểu vùng giá trị là như thế nào, anh có thể làm mẫu file excell giúp Đạt được không, cảm ơn anh nhiều...!!!!!!!
T2=SUMPRODUCT(($B$2:$D$8=$S2)*$E$2:$E$8+($H$2:$J$8=$S2)*$K$2:$K$8+($N$2:$P$8=$S2)*$Q$2:$Q$8)
Trong file bạn làm mẫu chỉ có 3 chuyền, nếu giả sử có 10 chuyền hoặc hơn nữa, thì khi áp dụng công thức tại bài #6 sẽ rất dài và khó lòng xem xét tra cứu.Cảm ơn anh Phan Thế Hiệp, nhưng mình vần chưa hiểu vùng giá trị là như thế nào, anh có thể làm mẫu file excell giúp Đạt được không, cảm ơn anh nhiều...!!!!!!!
C12=SUMPRODUCT(($B$2:$D$8=$B12)*$E$2:$E$8+($H$2:$J$8=$B12)*$K$2:$K$8+($N$2:$P$8=$B12)*$Q$2:$Q$8+
($T$2:$V$8=$B12)*$W$2:$W$8+($Z$2:$AB$8=$B12)*$AC$2:$AC$8+($AF$2:$AH$8=$B12)*$AI$2:$AI$8+($AL$2:$AN$8=$B12)*$AO$2:$AO$8
+($AR$2:$AT$8=$B12)*$AU$2:$AU$8+($AX$2:$AZ$8=$B12)*$BA$2:$BA$8+($BD$2:$BF$8=$B12)*$BG$2:$BG$8)
D12=SUMPRODUCT(($B$2:$BF$8=$B12)*N(OFFSET($E$2:$E$8,ROW($1:$7)-1,INT((COLUMN($A:$BE)-1)/6)*6)))
Function SL(Ten As String, CSDL As Range) As Double
Dim Cls As Range
For Each Cls In CSDL
If Cls.Value = Ten Then
SL = SL + Cls.End(xlToRight).Value
End If
Next Cls
End Function
Góp ý cho bạn:Em dùng đủ mọi cách rồi nhưng không được,
Trong file bạn làm mẫu chỉ có 3 chuyền, nếu giả sử có 10 chuyền hoặc hơn nữa, thì khi áp dụng công thức tại bài #6 sẽ rất dài và khó lòng xem xét tra cứu.
Enter, fill xuống.Mã:C12=SUMPRODUCT(($B$2:$D$8=$B12)*$E$2:$E$8+($H$2:$J$8=$B12)*$K$2:$K$8+($N$2:$P$8=$B12)*$Q$2:$Q$8+ ($T$2:$V$8=$B12)*$W$2:$W$8+($Z$2:$AB$8=$B12)*$AC$2:$AC$8+($AF$2:$AH$8=$B12)*$AI$2:$AI$8+($AL$2:$AN$8=$B12)*$AO$2:$AO$8 +($AR$2:$AT$8=$B12)*$AU$2:$AU$8+($AX$2:$AZ$8=$B12)*$BA$2:$BA$8+($BD$2:$BF$8=$B12)*$BG$2:$BG$8)
Tôi làm thêm cho bạn 1 công thức tổng quát khác nếu như có trường hợp nhiều chuyền xảy ra, bạn dùng như sau:
Enter, fill xuống.Mã:D12=SUMPRODUCT(($B$2:$BF$8=$B12)*N(OFFSET($E$2:$E$8,ROW($1:$7)-1,INT((COLUMN($A:$BE)-1)/6)*6)))
Với lưu ý:
$B$2:$BF$8: BF là cột cuối chứa tên nhân viên, thuộc chuyền 10.
COLUMN($A:$BE): ở trên là B: BF, thì số cột tương ứng là A: BE
Do vậy dù có số chuyền tăng hơn nữa, thì bạn chỉ cần chỉnh tại 2 vị trí trên là giải quyết được.
Tuyệt vời! cảm ơn bạn