Cảm ơn hoangdanh82vn rất nhiều, nhưng anh có thể giải thích cho em công thức mà anh đã dùng không?
Một lần nữa xin cảm ơn!
Cách của mình là dùng name và hàm mảng để trích lọc và sắp xếp dữ liệu.
Theo như mình hiểu thì bạn có một bảng liệt kê danh sách học sinh và tính xếp loại cho từng học sinh. thứ bậc xếp hạng sẽ khác nhau và bạn muốn trích lọc ra một bảng mới với họ tên sẽ được xếp theo thứ hạng giảm dần.
Cách của mình là :
- Lấy 1 chia cho điểm môn văn và cộng vào số hạng : ta sẽ có một số mới chỉ thứ hạng mới dựa trên thứ hạng cũ và số điểm của môn văn. thứ hạng càng cao thì càng tệ và sẽ được xếp ở dòng cuối cùng:
Công thức là : H3+1/C3
- để tính thứ hạng mới cho tất cả các học sinh thì dùng mảng :
Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15
- tìm thứ hạng bé nhất trong thứ hạng mới tìm được ở trên :
SMALL(Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15,ROW()-19) với ROW()=20 vì dùng cho ô B20
- So sánh thứ hạng bé nhất vừa tìm ra với tất cả thứ hạng mới tìm được ở trên :
SMALL(Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15,ROW()-19)=Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15 đến đây sẽ trả về một mảng True Fale (chỉ có 1 phần tử True ứng với thứ hạng bé nhất, còn lại đều là False).
-Tìm số chỉ dòng của những ô chứa các thứ hạng :
ROW(Sheet1!$H$3:$H$15)
- Tìm ra số chỉ dòng ứng với phần tử True false tìm được ở trên :
(SMALL(Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15,ROW()-19)=Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15)*ROW(Sheet1!$H$3:$H$15)
- Tìm số chỉ dòng lớn nhất trong mảng vừa tìm ra ở trên.
=MAX((SMALL(Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15,ROW()-19)=Sheet1!$H$3:$H$15+1/Sheet1!$C$3:$C$15)*ROW(Sheet1!$H$3:$H$15)) và được đặt tên là ROW.
- Dựa và số chì dòng tìm được ở trên, ta sẽ dò tìm các dữ liệu tương ứng với số chỏ dòng và chỉ cột trong bảng dữ liệu :
=INDEX(dl,row-2,COLUMN()) với dl=Sheet1!$A$3:$I$15
Kéo công thức xuống cho các ô còn lại