Nhờ giải thích công thức (1 người xem)

Người dùng đang xem chủ đề này

romi272007

Thành viên mới
Tham gia
5/10/11
Bài viết
42
Được thích
8
Cả nhà dùng công thức mảng thì hẳn sẽ biết đến công thức kinh điển này:
{=IFERROR(INDEX(Data,SMALL(IF(MATCH(Data,Data,0)=ROW(INDIRECTd("1:"&ROWS(data))), MATCH(Data,Data,0),""),ROW(INDIRECT("1:"&ROWS(Data))))),"")}
Đây là hàm để sắp xếp các giá trị số trong một dãy động với một mảng dữ liệu đặt tên là data.
Sẽ chẳng có gì đáng nói nếu như em có thể nhớ được công thức này mà áp dụng. Vì em đã từng dùng đến nó, nhưng áp dụng một cách máy móc nên giờ khi cần dùng lại em chẳng nhớ gì cả. Mong cả nhà giải thích giúp em, nhất là cái đoạn MATCH(Data,Data,0)=ROW(INDIRECTd("1:"&ROWS(data))), MATCH(Data,Data,0),""),ROW(INDIRECT("1:"&ROWS(Data))))),""). Em thực sự không hiểu ý nghĩa của đoạn này để làm gì ạ. Cảm ơn cả nhà
 
Mong chờ sự giúp đỡ từ các cao thủ ạ
 
Mã:
=IFERROR(INDEX(Data,SMALL(IF([COLOR=#000080][B]MATCH(Data,Data,0)=R OW(INDIRECTd("1:"&ROWS(data)))[/B][/COLOR], [COLOR=#ff0000][B]MATCH(Data,Data,0),""),ROW(INDIRECT("1:"&ROWS(Data )))))[/B][/COLOR],"")
Tôi giải thích cơ bản như sau mong là sẽ dể hiểu
Phần màu xanh: một mảng gồm bao gồm các dữ liệu trùng nhau thì phần MATCH(Data,Data,0) sẽ lấy ra vị trí đầu tiên của giá trị trùng đó trong mảng
- Ví dụ với mảng: {0,1,1,2} thì các giá trị tìm kiếm là 0,1,2 và kết quả trả về là vị trí đầu tiên của giá trị đó trong mảng tức {1,2,2,4}
Hàm ROW(INDIRECTd("1:"&ROWS(data))) sẽ trả về số thứ tự các dòng trong mảng
Với ví dụ bên trên thì các dòng là {1,2,3,4}
ð Tổng thể phần màu xanh là:
Mã:
{1,2,2,4}={1,2,3,4}
Kết quả thu được của phép so sánh bên trên là kết quả của hàm If phần màu xanh + đỏ, tương tự phần giải thích trên bạn có thể suy ra kết quả của hàm if là {1,2,””,4}
Và phần còn lại chắc bạn đã hiểu
Cái lõi của hàm này là thuật toán: tìm vị trí đầu tiên của các giá trị trong mảng, nếu trùng thì lấy vị trí đầu tiên. Sau đó dùng Index + Small để lấy ra vị trí tương ứng.

Chúc bạn thành công
 
Mã:
=IFERROR(INDEX(Data,SMALL(IF([COLOR=#000080][B]MATCH(Data,Data,0)=R OW(INDIRECTd("1:"&ROWS(data)))[/B][/COLOR], [COLOR=#ff0000][B]MATCH(Data,Data,0),""),ROW(INDIRECT("1:"&ROWS(Data )))))[/B][/COLOR],"")
Tôi giải thích cơ bản như sau mong là sẽ dể hiểu
Phần màu xanh: một mảng gồm bao gồm các dữ liệu trùng nhau thì phần MATCH(Data,Data,0) sẽ lấy ra vị trí đầu tiên của giá trị trùng đó trong mảng
- Ví dụ với mảng: {0,1,1,2} thì các giá trị tìm kiếm là 0,1,2 và kết quả trả về là vị trí đầu tiên của giá trị đó trong mảng tức {1,2,2,4}
Hàm ROW(INDIRECTd("1:"&ROWS(data))) sẽ trả về số thứ tự các dòng trong mảng
Với ví dụ bên trên thì các dòng là {1,2,3,4}
ð Tổng thể phần màu xanh là:
Mã:
{1,2,2,4}={1,2,3,4}
Kết quả thu được của phép so sánh bên trên là kết quả của hàm If phần màu xanh + đỏ, tương tự phần giải thích trên bạn có thể suy ra kết quả của hàm if là {1,2,””,4}
Và phần còn lại chắc bạn đã hiểu
Cái lõi của hàm này là thuật toán: tìm vị trí đầu tiên của các giá trị trong mảng, nếu trùng thì lấy vị trí đầu tiên. Sau đó dùng Index + Small để lấy ra vị trí tương ứng.

Chúc bạn thành công
Hình như em bắt đầu hiểu rồi. Cảm ơn dhn46 nhiều ạ.
Chúc anh thành công. :)
 

Bài viết mới nhất

Back
Top Bottom