hocexcel_1991
Bắt đầu học Excel
- Tham gia
- 9/7/18
- Bài viết
- 760
- Được thích
- 1,316
Xem file kèm.Chào anh/chị
Nhờ anh/chị giúp em bài Lọc dữ liệu trùng từ 2 cột và tính tổng theo như file đính kèm nhé.
Xin cám ơn.
Cám ơn anh nhiều, nhìn vào công thức mà em thấy "choáng"Xem file kèm.
Thân
Anh biết là: em, @congnt92 và @khi ta 20 đang học hỏi về "Công thức Mảng" nên cố tình giải bài và cắt nghĩa đôi chút để các em tham khảo.Cám ơn anh nhiều, nhìn vào công thức mà em thấy "choáng"
Chúc anh buổi tối vui vẻ
Chào anh em xin góp vui:Anh biết là: em, @congnt92 và @khi ta 20 đang học hỏi về "Công thức Mảng" nên cố tình giải bài và cắt nghĩa đôi chút để các em tham khảo.
Tìm lại các nickname sau sẽ học được nhiều về công thức Mảng:
2/ @ndu960816313/ @huuthang_bd , @phuocam4/ @HieuCD5/ @dazkangel6/ @quocgiacanChúc anh em ngày vui.
Thân
H10=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(COLUMN(A:D)*1000+ROW($2:$6))/ISTEXT(A$2:D$6)/(COUNTIF(H$9:H9,A$2:D$6)=0),1),"C000R000"),2),5,8),0),"")
Để tăng thêm phần khó cho bài, anh đính kèm dữ liệu theo file với hai yêu cầu:Chào anh em xin góp vui:
Mã:H10=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(COLUMN(A:D)*1000+ROW($2:$6))/ISTEXT(A$2:D$6)/(COUNTIF(H$9:H9,A$2:D$6)=0),1),"C000R000"),2),5,8),0),"")
Cột H là "nghề" của bác ở Can DuocXem file kèm.
Thân
Đúng vậy! Tính tình ảnh hiền hòa, đơn giản dễ thương, nên cách xử lý bài của ảnh cũng không rối rắm phức tạp.Cột H là "nghề" của bác ở Can Duoc![]()
Có bài hơi tương tự theo link: https://www.giaiphapexcel.com/diendan/threads/tự-động-liệt-kê-và-sắp-xếp-dữ-liệu.136579/#post-871935Để tăng thêm phần khó cho bài, anh đính kèm dữ liệu theo file với hai yêu cầu:
1/ Lấy TEN, với sắp xếp TEN từ A->Z. (Như các cách tại bài trên, chỉ lấy theo thứ tự cột, chứ chưa lấy theo Alphabet)
2/ Lấy TEN, với SL tổng của từng tên được sắp xếp từ Lớn đến Nhỏ.
Dĩ nhiên, là không dùng cột phụ.
Chúc anh em ngày vui.
![]()
Cho tôi thử:Để tăng thêm phần khó cho bài, anh đính kèm dữ liệu theo file với hai yêu cầu:
1/ Lấy TEN, với sắp xếp TEN từ A->Z. (Như các cách tại bài trên, chỉ lấy theo thứ tự cột, chứ chưa lấy theo Alphabet)
2/ Lấy TEN, với SL tổng của từng tên được sắp xếp từ Lớn đến Nhỏ.
Dĩ nhiên, là không dùng cột phụ.
Chúc anh em ngày vui.
![]()
J10=INDIRECT(TEXT(MIN(IF(((COUNTIF($A$2:$C$6,"<"&$A$2:$C$6)+1-SUM(COUNTIF($A$2:$C$6,J$9:J9)))*{1,0,1}=1),(ROW($2:$6)*10^2+{1,0,3}))),"R0C00"),)
Thiệt chứ thử gì em!!Cho tôi thử:
Bấm Ctrl+Shift+Enter, copy xuống, trường hợp còn lại, sửa ">" thành "<"!!!Mã:J10=INDIRECT(TEXT(MIN(IF(((COUNTIF($A$2:$C$6,"<"&$A$2:$C$6)+1-SUM(COUNTIF($A$2:$C$6,J$9:J9)))*{1,0,1}=1),(ROW($2:$6)*10^2+{1,0,3}))),"R0C00"),)
Em đang làm nên giờ mới trả lời được, công thức hơi lủng củng:Để tăng thêm phần khó cho bài, anh đính kèm dữ liệu theo file với hai yêu cầu:
1/ Lấy TEN, với sắp xếp TEN từ A->Z. (Như các cách tại bài trên, chỉ lấy theo thứ tự cột, chứ chưa lấy theo Alphabet)
2/ Lấy TEN, với SL tổng của từng tên được sắp xếp từ Lớn đến Nhỏ.
Dĩ nhiên, là không dùng cột phụ.
Chúc anh em ngày vui.
![]()
J10=IFERROR(INDIRECT(TEXT(RIGHT(AGGREGATE(15,6,(COLUMN(A:C)+ROW($2:$6)*1000+COUNTIF(A$2:D$6,"<="&A$2:D$6)*10^7)/ISTEXT(A$2:C$6)/(COUNTIF(J$9:J9,A$2:C$6)=0),1),6),"R0C000"),0),"")
M10=IFERROR(INDIRECT(TEXT(RIGHT(AGGREGATE(14,6,(COLUMN(A:C)+ROW($2:$6)*1000+SUMIF(A$2:C$6,A$2:C$6,B$2:D$6)*10^7)/ISTEXT(A$2:C$6)/(COUNTIF(M$9:M9,A$2:C$6)=0),1),6),"R0C000"),0),"")
Câu 2 chắc dễ hơn câu 1, nhưng chắc dài hơn, tôi đang dùng đt, để tý làm thử.Thiệt chứ thử gì em!!
Dữ hông hôm nay mới ra mặt
Khà khà khà!
Còn câu 2 mần luôn, là sắp sếp theo SL tổng từ Lớn đến nhỏ, nhưng suy cho TEN. Không dùng cột SL đã cộng sẵn bằng công thức SUMIF(). Tức tìm TEN trước rồi mới SUMIF() cho SL.
Thân
Đúng rồi có gì mà lủng củng!Em đang làm nên giờ mới trả lời được, công thức hơi lủng củng:
Mã:J10=IFERROR(INDIRECT(TEXT(RIGHT(AGGREGATE(15,6,(COLUMN(A:C)+ROW($2:$6)*1000+COUNTIF(A$2:D$6,"<="&A$2:D$6)*10^7)/ISTEXT(A$2:C$6)/(COUNTIF(J$9:J9,A$2:C$6)=0),1),6),"R0C000"),0),"")
Mã:M10=IFERROR(INDIRECT(TEXT(RIGHT(AGGREGATE(14,6,(COLUMN(A:C)+ROW($2:$6)*1000+SUMIF(A$2:C$6,A$2:C$6,B$2:D$6)*10^7)/ISTEXT(A$2:C$6)/(COUNTIF(M$9:M9,A$2:C$6)=0),1),6),"R0C000"),0),"")
Dạo này hơi lười nên ít giải bàiĐúng rồi có gì mà lủng củng!
Vậy em có thể giải cho chủ thớt bài https://www.giaiphapexcel.com/diendan/threads/tự-động-liệt-kê-và-sắp-xếp-dữ-liệu.136579/#post-871935 được rồi.
Chúc anh em ngày vui.
![]()
Đừng hoang mang! có thời gian anh sẽ giải thích rõ các công thức trên. Bài lấy ô dữ liệu kết hợp các trường hợp đặc thù của Mảng, rất hay.Công thức nhìn khủng quá, em xem mà không hiểu, ai có thể "chặt" ra từng khúc giải thích cho em được không?
Em xin cám ơn
Thử câu 2:Thiệt chứ thử gì em!!
Dữ hông hôm nay mới ra mặt
Khà khà khà!
Còn câu 2 mần luôn, là sắp sếp theo SL tổng từ Lớn đến nhỏ, nhưng suy cho TEN. Không dùng cột SL đã cộng sẵn bằng công thức SUMIF(). Tức tìm TEN trước rồi mới SUMIF() cho SL.
Thân
J10=INDIRECT(TEXT(MIN(IF(1/MIN(IFERROR(1/SUMIF($A$2:$C$6,IF(COUNTIF($J$9:J9,$A$2:$C$6)=0,$A$2:$C$6),$B$2:$D$6),""))=SUMIF($A$2:$C$6,IF(COUNTIF($J$9:J9,$A$2:$C$6)=0,$A$2:$C$6),B$2:D$6),(ROW($2:$6)*10^2+{1,0,3}))),"R0C00"),)
Hình như là cứ 1 năm vào khoảng tháng này anh ấy sẽ mất tích độ 15 đến 20 ngày gì đó Anh ạ.Đúng vậy! Tính tình ảnh hiền hòa, đơn giản dễ thương, nên cách xử lý bài của ảnh cũng không rối rắm phức tạp.
Mấy nay, không thấy anh @HieuCD vào, chắc lại lo cho đàn em thân yêu rồi, quên đàn em GPE!
Khà khà khà!
![]()
Như đã hứa, anh ghi sơ dưới đây vài nét chính để em tìm hiểu về các công thức Mảng tại bài trên.Công thức nhìn khủng quá, em xem mà không hiểu, ai có thể "chặt" ra từng khúc giải thích cho em được không?
Bạn nghiên cứu Pivot Table thử xem.Có cách nào lọc sản phẩm có số tồn ở nhiều kệ thành 1 con số tồn không vậy các bác ???
Xem thử nhaCó cách nào lọc sản phẩm có số tồn ở nhiều kệ thành 1 con số tồn không vậy các bác ???
@Phan Thế Hiệp: Tưởng không khó mà khó không tưởng. @@ Làm sao để học tốt được đây ta ?Như đã hứa, anh ghi sơ dưới đây vài nét chính để em tìm hiểu về các công thức Mảng tại bài trên.
Từ từ rồi em sẽ có sự tổng hợp về các cách giải quyết của công thức mảng theo từng phân đoạn.
Như các bài trên phải xử lý:
1/ Gộp (hoặc nối đuôi) có hay không từ nhiều mảng về 1 Mảng:
- Gộp (hay nối) hay không 1 Mảng từ nhiều mảng.
- Loại bỏ dữ liệu trùng lắp, hay liệt kê toàn bộ dữ liệu không phân biệt có trùng hay không.
- Truy xuất ô, hoặc vị trí của 1 thành phần hiện hữu trong Mảng.
Như bài #2 anh giải, dùng =OFFSET($A$2,MOD(ROW($1:$10)-1,5),INT((ROW($1:$10)-1)/5)*2), tức nối đuôi Vùng C2:C6 vào Vùng A2:A6, tạo thành Mảng 1 chiều dọc gồm 10 phần tử {A;A;B;B;C;C;D;A;A;A}. Từ đó, khi muốn lấy ra phần tử nào thỏa điều kiện thì dùng Match(): trả về kết quả dòng, hoặc Lookup()...tùy biến, sao cho tìm được số dòng của nó là giải quyết bài toán. (Hàm cơ bản MOD() và INT() em đã biết nên không bàn ở đây).Nói thêm: Tùy theo yêu cầu, khi ta cần tạo Mảng gộp từ 2 hoặc nhiều Vùng, liền kề hay cách khoảng, ta có thể dùng các cách sau:
- OFFSET(...,....,...)
- VLOOKUP/HLOOKUP(...,...,{1,2,3,...,n},...)
- CHOOSE({1,2,...,n}, Vùng 1, Vùng 2,..., Vùng n)
- LOOKUP( 'Mảng 1 chiều dọc/ngang', 'Mảng chọn hướng' , Vùng/Mảng giá trị cùng chiều với 'Mảng chọn hướng')
Nếu không gộp, thì khi xử lý Mảng ta phải định vị trí Hàng (row) và Cột (column) để tìm cách đánh dấu nó, cho nên phải dùng công thức:=ROW(1:n)*10^m + COLUMN(1:d) -> Vd: ứng với A2:A6 là {2001;3001;4001;5001;6001}, tương tự cho Vùng A2:C6 là {2001,2002,2003;3001,3002,3003;.....;6001,6002,6003}.Nhìn chung, dù gộp hay không cũng phải có liên quan đến hai hàm mảng ROW() và COLUMN() (hoặc Mảng hằng số như {2,3,4,5,6} hay {5;7;8;9;10}.v.v..), nhờ nó mà từ công thức thường chỉ chứa những thông số có giá trị đơn thành công thức Mảng, hay những công thức chấp nhận có đối số là Mảng.2/ Loại bỏ dữ liệu trùng lắp, hay liệt kê toàn bộ dữ liệu không phân biệt có trùng hay không.
Cách thường hay dùng của công thức để loại bỏ trùng lắp là:= INDEX( 'Vùng/Mảng chứa toàn bộ dữ liệu' , MATCH( 0, COUNTIF( 'Vùng chứa kết quả' , 'Vùng/Mảng chứa toàn bộ dữ liệu' ) , 0 ))Nhờ hàm COUNTIF() như trên khi xét thấy 'Vùng chứa kết quả' có giá trị tồn tại trong Vùng khớp với 'Vùng/Mảng chứa toàn bộ dữ liệu' nó sẽ đếm là 1, không khớp thì bằng 0, nhờ Match(0,...) truy tìm giá trị 0 đầu tiên sẽ ra kết quả dòng nào cần lấy ra. Tức lúc bấy giờ hàm COUNTIF() có chức năng báo hiệu hễ dữ liệu nào trùng thì báo 1, không trùng là 0.
3/ Truy xuất ô, hoặc vị trí của 1 thành phần hiện hữu trong Mảng.
Nếu dùng cách gộp 2 Vùng về thành 1 Mảng thì chỉ cần dùng =INDEX(..,Match(0,..,0)) như trên là tìm ra phần tử thỏa điều kiện.Nếu dùng cách 'đánh dấu' phần tử Mảng bằng Row()*10^n+Column() thì có nhiều cách để xử lý, nhưng cách ngắn gọn nhất là dùng bộ công thức INDIRECT(...,0) (Đối số 0 nhằm chọn kết quả có dạng RnCn, Vd: như thông thường ta ghi là D7, thì tương đương =R7C4) kết hợp với TEXT(....,"R00xC00y"), cụ thể là:=INDIRECT(TEXT( 'Mảng kết quả trả về' ,"R00xC00y"),0)Riêng về 'Mảng kết quả trả về': tùy theo yêu cầu của bài nhưng không ra khỏi dạng tổng quát dùng Small()/Large() hay Aggregate(14(15),6,...,.) mà kết hợp thêm với điều kiện Loại bỏ trùng lắp COUNTIF() ở trên đã nêu, ví dụ: Để sắp thứ tự từ nhỏ đến lớn thì thêm hàm: COUNTIF(Vùng a,"<"&Vùng b)Hoặc tính tổng SL rồi sắp từ Lớn đến nhỏ dùng thêm SUMIF(Vùng a, Vùng tiêu chí, Vùng giá trị).Anh chỉ đưa ra hướng nhìn về công thức Mảng để các em tự lần ra và nghiên cứu thêm thì mới thấy cái hay của nó.
Muốn dò thì phải dùng công cụ để tìm hiểu: em có thể chọn trọn đoạn công thức nào muốn tìm hiểu xong nhấn F9 sẽ thấy kết quả của đoạn đó.
Hoặc chọn cả công thức, dùng công cụ hỗ trợ Formulas\Evaluate Formula, rồi nhấn Evaluate từng lần một sẽ thấy cách hoạt động và trả kết quả của công thức đó. Cũng phải tự dò tìm những bài hay về công thức Mảng mà anh đã cung cấp tên của những nickname ở bài #4 để bổ sung kiến thức Mảng của mình.
Chúc em học tập vui với anh em GPE
Thân
"Dục tốc bất đạt"@Phan Thế Hiệp: Tưởng không khó mà khó không tưởng. @@ Làm sao để học tốt được đây ta ?
Đọc câu truyện của bạn tôi lại thấy tiếc thay cho nhà văn Kim Dung. Chắc tôi phải nên học cách bình tĩnh, không nóng vội. Nhưng nhiều khi ngõ cụt,không hiểu gì nên là cứ bị nản. Tôi nhớ thời đầu tiên biết dùng công thức Vlookup. Tôi toàn đi copy thôi, mãi lâu lâu mới biết là cái điều kiện ở mỗi dấu phẩy là gì, từ đó nhớ lâu hơn hẳn."Dục tốc bất đạt"
Cứ "nấu" từ từ! rồi cái gì cũng phải "nhừ".
Chuyện vui trong kiếm hiệp: "Ỷ Thiên Đồ Long ký"
Do may mắn hiểu được 1 đoạn văn bị in lên mặt của sứ giả Ba Tư, nên Trương Vô Kỵ đã đoạt được toàn bộ "Thánh Hỏa Lệnh Minh giáo". Lại nhờ Tiểu Siêu phiên dịch dùm, do nóng vội lấy cái ngắn nhất ra đọc, đọc xong Vô Kỵ ngẩn tò te chẳng biết đâu mà mò! bấy giờ Triệu Minh góp ý, lấy cái nào giống với cái lệnh đã in lên mặt sứ giả, thì tìm được cái dài thứ 2, và sau khi phiên dịch lại hiểu được nhiều hơn, bèn lấy cái dài nhất ra đọc thì hiểu hết hoàn toàn.
Rút ra rằng: Trong công thức chọn lấy cái cơ bản nhất, tuy nó dài nhưng đọc nó sẽ dễ hiểu, rồi từ từ áp dụng đến các công thức ngắn hơn.
Thân.
Sao lại tiếc vậy anh ?Đọc câu truyện của bạn tôi lại thấy tiếc thay cho nhà văn Kim Dung.
à, thì tôi nghe nói ông ấy mất rồi! Nên là sẽ không còn được đọc truyện mới của ông ấy nữa.Sao lại tiếc vậy anh ?
Truyện mới nhất của ông í viết cách đây cũng chừng nữa thế kỷ rồi anh ạ, với cuốn Lộc đỉnh ký .à, thì tôi nghe nói ông ấy mất rồi! Nên là sẽ không còn được đọc truyện mới của ông ấy nữa.
Chúc bạn ngày mới vui nha!