Anh bebo với linhngoc nếu có thời gian có thể giúp em giải thích qua công thức dùng trong hàm, nhất là đoạn dùng để tổng hợp phần Mã được ko ạ, em nhìn từ nãy nhưng không sáng ra được mấy, hic

.
Em cảm ơn nhiều,
Mình cũng không biết giải thích thế nào, mình nói theo mình hiểu nhé.
Yêu cầu là cần tìm dữ liệu trong 2 cột không tính những dữ liệu trùng. Trước hết tìm 1 cột đã:
Công thức để tìm dữ liệu không trùng trong cột A là:
=INDEX($A$3:$A$15,MATCH(0,COUNTIF($G$2:G2,$A$3:$A$15)+($A$3:$A$15=""),0))
Hàm index (vùng dữ liệu, lấy dòng thứ mấy, cột thứ mấy) (vùng dữ liệu là cột A rồi nên có thể bỏ qua đối số thứ 3)
Dữ liệu cần lấy trong cột A, và cần phải là không được trùng nên dùng macth để tìm dòng.
MATCH(0,COUNTIF($G$2:G2,$A$3:$A$15)+($A$3:$A$15=""),0)
- COUNTIF($G$2:G2,$A$3:$A$15) hàm mảng này dùng countif để đếm số dữ liệu xuất hiện trong cột A xuất hiện trong vùng $G$2:G2 (công thức kéo đến đâu vùng này lại mở rộng thêm) nếu tìm thấy (tức là trùng) thì trả về 1 số khác 0 còn không tìm thấy thì trả về 0 (chưa trùng),
- ($A$3:$A$15="") chỗ này có tác dụng để phòng trong vùng dữ liệu có chứa ô trống. Nếu không trống thì trả về True còn trống thì trả về False
Kết quả của COUNTIF($G$2:G2,$A$3:$A$15)+($A$3:$A$15="") sẽ trả về mảng có chứa 0 và 1. giá trị nào thỏa mãn điều kiện thì là 0 còn không thỏa mãn thì là 1. Bạn bôi đen và ấn F9 từng phần sẽ thấy.
Dùng match tìm số 0 trong đó sẽ chỉ đúng dòng cần tìm trong cột A và index sẽ lấy giá trị trong cột A.
Chỗ Match này hơi khó hiểu. Bạn ấn F9 mà chưa hiểu lắm thì có thể tạo 4 cột. cột 1 chứa công thức COUNTIF($G$2:G2,$A$3:$A$15), cột 2 chứa ($A$3:$A$15=""), cột 3 cộng 2 cột vừa rồi lại và cột 4 là dùng match (0, cột 3,0) và nhìn kết quả trên cột 4 này sẽ dễ thấy hơn.
Tìm giá trị duy nhất trong bảng kia cũng tương tự như vậy.
Cuối cùng là cần lọc: Nếu xuất hiện ở cột A rồi và duy nhất thì lấy còn không thì lấy tiếp giá trị trong cột B. Ta dùng hàm If. Nhưng index(...) khi tìm không ra sẽ ra lỗi, vậy dùng ifiserror bẫy lỗi luôn:
IFISERROR(
INDEX(...),
IFISERROR(INDEX(..),""))
Hàm trên hiểu là nếu
INDEX(...) tìm thấy thì lấy giá trị trả kết quả còn không thì lấy
IFISERROR(INDEX(..),"") Hàm này cũng là nếu
INDEX(..) có không lỗi thì lấy còn lỗi thì trả về rỗng.
Hàm chỉ có vậy thôi, Hy vọng bạn hiểu!