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)))
ý nghĩa hoạt động của công thức này là gì vậy các anh
6 chính là khoảng cách từ dòng đầu tiên của bảng tính đến dòng dữ liệu chúng ta cần xét điều kiện, ở ví dụ này dòng dữ liệu chúng ta cần xét thỏa mãn điều kiện bắt đầu từ ô A7 trở đi...Trừ 6 để đánh dấu dòng bắt đầu xét điều kiện trở thành dòng đầu tiên trong mảng do name DK tạo ra.
Trong trường hợp bạn chèn thêm dòng phía trên ô A7 thì công thức trong name của tôi sẽ không cho kết quả đúng nữa, vì lúc này khoảng cách từ dòng đầu tiên của bảng tính đến dòng chứa dữ liệu xét điều kiện không phải bằng 6 nữa mà là một số khác.
Để khắc phục tình trạng này bạn có thể sửa name DK thành :
Và công thức tại ô J9 thành :PHP:=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,"")
Bạn có thể chèn dòng thoải mái mà không cần quan tâm ta phải trừ đi bao nhiêu nữa mà vẫn cho kết quả đúng.PHP:=IF(ROWS($1:1)>COUNT(DK),"",INDEX($A$7:$H$27,SMALL(DK,ROWS($1:1)),COLUMN(A1)))
Dạng công thức này được sử dụng rất nhiều trên diễn đàn này trong các bài lọc dữ liệu theo điều kiện, bạn search thử xem nhé. Gửi bạn câu này @ :ý nghĩa hoạt động của công thức này là gì vậy các anh
IF(ROW(1:1)>COUNT(DK),"",INDEX($A$7:$H$27,SMALL(DK,ROW(1:1)),COLUMN(B1)))
da để em tự nghiên cứu coi thế nàoDạng công thức này được sử dụng rất nhiều trên diễn đàn này trong các bài lọc dữ liệu theo điều kiện, bạn search thử xem nhé. Gửi bạn câu này @ :
Nguyên văn bởi ndu96081631 :
"Mấy cái hàm này hơi trừu tượng chút... Nói đơn giản thì.. đơn giản, nói phức tạp thì.. phức tạp (tùy năng khiếu và khả năng tư duy của mỗi người)
Vậy thì không gì bằng bạn tự mình vắt óc suy nghĩ đi ----> Vượt qua được 1 lần sẽ có lợi cho sự tiến bộ của bạn sau này
Hic... Bắt giải thích từng đoạn 1 chắc... CHẾT
(Cố gắng đi, Excel còn nhiều thứ khó hơn rất nhiều đấy)"
Đây là câu trả lời hay nhất mà tôi nhận được khi mới tham gia diễn đàn này!
Thanks for your reply!
Tức là tạo 1 bảng trung gian để tính toán trước khi ra kết quả cuối cùng. Bạn down file ở bài #8 về, xem công thức sẽ thấy địa chỉ bảng phụ được đặt ở đâu trong file nhé.lập bảng phụ là như thế nào vậy bạn.Mình thật sự không hiểu. giúp mình với.