nếu như dữ liệu nhập trùng nhau trong một ngày cùng một mặt hàng, cùng một xưởng tại sao không cộng tổng lại bạn. theo mình nghỉ thì tác giả muồn cộng dồn lại chứ ko phải liệt kê ra như thế đâu bạn ạ. thân...!Bạn xem trong file đính kèm nhé.
Cám ơn bạn hoamattroi, thật ra thì ý của mình là giống như bạn dream miêu ta vậy, mình gửi lại file các bạn coi giúp mình, thật ra thì không có cột ngày bên phần báo cáo.nếu như dữ liệu nhập trùng nhau trong một ngày cùng một mặt hàng, cùng một xưởng tại sao không cộng tổng lại bạn. theo mình nghỉ thì tác giả muồn cộng dồn lại chứ ko phải liệt kê ra như thế đâu bạn ạ. thân...!
Lam macro khó không anh, anh chỉ em sử dụng cái đó với,Với sự trợ giúp bằng macro sự kiện
(2)Lam macro khó không anh, (1) anh chỉ em sử dụng cái đó với,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [M3]) Is Nothing Then
1 Dim Rws As Long, Rng As Range, WF As Object, Cls As Range
Set Rng = [A7].CurrentRegion: Rws = Rng.Rows.Count
[k8].Resize(Rws, 7).ClearContents
4 [A7].Resize(Rws, 8).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"AA1:AB2"), CopyToRange:=Range("AA7:AF7"), Unique:=False
Set Rng = [aa7].CurrentRegion: Rws = Rng.Rows.Count
ActiveWorkbook.Names("Criteria").Delete
ActiveWorkbook.Names("Extract").Delete
8 [aa7].Resize(Rws, 2).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
("BA1:BB2"), CopyToRange:=Range("K7:L7"), Unique:=True
Rws = [AA65500].End(xlUp).Row
If Rws = [k65500].End(xlUp).Row Then
11 [k8].Resize(Rws, 6).Value = [aa8].Resize(Rws, 6).Value
Else
Set WF = Application.WorksheetFunction
For Each Rng In Range([k8], [k8].End(xlDown))
For Each Cls In Range([Ac7], [AB7].End(xlToRight))
16 Cells(Rng.Row, Rng.Column + Cls.Column - 27).Value = WF.SumIf([aa7].CurrentRegion, Rng.Value, Cls)
Next Cls
Next Rng
End If
End If
End Sub
Không thích Macro thì bảng phụ vậy, thực ra ngay trên bảng của tôi bạn cũng có thể tổng hợp được bằng cách lọc duy nhất phần mã sản phẩm, sau đó SUMIF tính tổng là ok. Test thử file này :Cám ơn bạn hoamattroi, thật ra thì ý của mình là giống như bạn dream miêu ta vậy, mình gửi lại file các bạn coi giúp mình, thật ra thì không có cột ngày bên phần báo cáo.
bạn giải thích giúp mình tí nhé. Minh không hiểu công thức của bạn chổ nàyKhông thích Macro thì bảng phụ vậy, thực ra ngay trên bảng của tôi bạn cũng có thể tổng hợp được bằng cách lọc duy nhất phần mã sản phẩm, sau đó SUMIF tính tổng là ok. Test thử file này :
=IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5);ROW(Sheet1!$A$7:$A$27)-6;"")
=IF(ROW(1:1)>COUNT(DK);"";INDEX($A$7:$H$27;SMALL(DK;ROW(1:1));COLUMN(A1)))
Tại ô bất kỳ bạn gõ thử =COUNT(DK) xem ra bao nhiêu?như vậy theo lý luận: nếu ROW (1:1) lớn hơn COUNT(DK) thì bằng "", mà kết quả cho ra 1=1 mà ct vẩn cho ra kết quả 2 là sử dụng hàm INDEX, tư tự kéo ct xuống ROW(2:2) > COUNT(DK) thì kết quả phải bằng "" chứ???
Count(DK) tại thời điểm từ ngày 02/12/2011 đến ngày 11/12/2011 bằng 21 tương đương với 21 dòng thỏa mãn DK.bạn giải thích giúp mình tí nhé. Minh không hiểu công thức của bạn chổ này
Nếu ROW (1:1) lớn hơn COUNT(DK) thì bằng "", mà kết quả cho ra 1=1 mà ct vẩn cho ra kết quả 2 là sử dụng hàm INDEX, tư tự kéo ct xuống ROW(2:2) > COUNT(DK) thì kết quả phải bằng "" chứ???
Minh mới học excel mong các bạn chỉ giúp cho. cám ơn các bạn nhiều...!
từ đoạnCount(DK) tại thời điểm từ ngày 02/12/2011 đến ngày 11/12/2011 bằng 21 tương đương với 21 dòng thỏa mãn DK.
Row(1:1) = 1 nhỏ hơn COUNT(DK) = 21 vậy hàm IF sẽ trả về kết quả là vế sau : "INDEX($A$7:$H$27;SMALL(DK;ROW(1:1));COLUMN(A1))"
Tương tự Row(2:2) = 2 < 21 vẫn trả về kết quả là vế sau của hàm IF
=IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5);ROW(Sheet1!$A$7:$A$27)-6;"")
Bạn nhầm lẫn giữa ROWS và ROW:từ đoạnVậy là sao nhỉ? rỏ ràng là đk là hàm if mà. Nếu ngày 02/12/2011 đến ngày 11/12/2011 thảo mãn thì " = ROW(Sheet1!$A$7:$A$27)-6" mà nếu tách công thức này ra =ROW(Sheet1!$A$7:$A$27) cho kết quả =7 có trừ đi 6, như vậy COUNT(DK) = 1 mà chứ đâu phải =21 nhỉ ???. Mình thực sự không hiểu chổ này.Mã:=IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5);ROW(Sheet1!$A$7:$A$27)-6;"")
mong bạn chỉ giúp
từ đoạnVậy là sao nhỉ? rỏ ràng là đk là hàm if mà. Nếu ngày 02/12/2011 đến ngày 11/12/2011 thảo mãn thì " = ROW(Sheet1!$A$7:$A$27)-6" mà nếu tách công thức này ra =ROW(Sheet1!$A$7:$A$27) cho kết quả =7 có trừ đi 6, như vậy COUNT(DK) = 1 mà chứ đâu phải =21 nhỉ ???. Mình thực sự không hiểu chổ này.Mã:=IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5);ROW(Sheet1!$A$7:$A$27)-6;"")
mong bạn chỉ giúp
mình đã hiểu...! thank bạn nhiều....! có gì mình ko hiểu tiếp tục nhờ bạn chỉ giúp nhéDK ={1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21}
Vì vậy : Count(DK) = 21
Bạn cho mình hỏi 1 ý nhỏ này nữa, tại sao không trừ số khác mà lại là -6 vậy, mới tham gia dien đàn chưa lâu mong anh chị chỉ giúp. E cám ơnName (DK) trả kết quả là một mảng gồm 21 phần tử, không chỉ trả về kết quả đơn như bạn miêu tả, nó là kết quả của của nhiều phép tính đơn gộp lại :
Trong name DK =IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5);ROW(Sheet1!$A$7:$A$27)-6;"") .
Công thức này hoạt động như sau :
Nó sẽ đi thực hiện trình tự các phép tính đơn :
1/ IF(Sheet1!$K$5<=Sheet1!$A$7)*(Sheet1!$A$7<=Sheet1!$M$5); Row($A$7)-6
Kết quả đầu tiên bằng 1
2/ IF(Sheet1!$K$5<=Sheet1!$A$8)*(Sheet1!$A$8<=Sheet1!$M$5); Row($A$8)-6
Kết quả thứ hai bằng 2
3/ IF(Sheet1!$K$5<=Sheet1!$A$9)*(Sheet1!$A$9<=Sheet1!$M$5); Row($A$9)-6
Kết quả thứ ba bằng 3
.........................................
21/ IF(Sheet1!$K$5<=Sheet1!$A$27)*(Sheet1!$A$27<=Sheet1!$M$5); Row($A$27)-6
Kết quả cuối cùng thỏa mãn điều kiện bằng 21
Cuối cùng được mảng kết quả sau :
DK ={1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21}
Vì vậy : Count(DK) = 21
Bạn có thể tham khảo cách hoạt động của công thức mảng bằng cách search trên diễn đàn vời từ khóa "Công thức mảng"
ROW(A7:A27) là mảng {7;8;9;..;27}Bạn cho mình hỏi 1 ý nhỏ này nữa, tại sao không trừ số khác mà lại là -6 vậy, mới tham gia dien đàn chưa lâu mong anh chị chỉ giúp. E cám ơn
Vậy là, giả sử có A7:A1000 thì phải trừ đi 999 phải ko anh beboROW(A7:A27) là mảng {7;8;9;..;27}
Trừ đi 6 để tạo mảng từ 1 đến 21
7-1 = 6Vậy là, giả sử có A7:A1000 thì phải trừ đi 999 phải ko anh bebo
Bạn cho mình hỏi 1 ý nhỏ này nữa, tại sao không trừ số khác mà lại là -6 vậy, mới tham gia dien đàn chưa lâu mong anh chị chỉ giúp. E cám ơn
=IF((Sheet1!$K$5<=Sheet1!$A$7:$A$27)*(Sheet1!$A$7:$A$27<=Sheet1!$M$5),ROW(Sheet1!$A$7:$A$27)-ROW(Sheet1!$A$7)+1,"")
=IF(ROWS($1:1)>COUNT(DK),"",INDEX($A$7:$H$27,SMALL(DK,ROWS($1:1)),COLUMN(A1)))