DS =OFFSET($B$2,,,COUNTA($B$2:$B$1000),)
Tạo ra một mảng bắt đầu từ ô B2, có một cột, còn số hàng thì bằng với tổng số ô chứa dữ liệu trong dãy B2:B1000
DK_1 =IF(MATCH(DS,DS,0)=ROW($1:$1000),ROW($1:$1000),"")
Lấy từng vị trí xuất hiện lần đầu tiên của mỗi phần tử trong mảng DS đi dò lần lượt với các số từ 1 đến 1000 (là các con số do hàm ROW trả về): lấy vị trí xuất hiện đầu tiên của phần tử thứ nhất trong mảng DS dò với số 1, lấy vị trí xuất hiện đầu tiên của phần tử thứ hai trong mảng DS dò với số 2, lấy vị trí xuất hiện đầu tiên trong mảng DS của phần tử thứ ba dò với số 3, và cứ thể... so sánh từng cặp một. Nếu cặp nào trùng nhau, thì lấy con số đang dùng để dò với vị trí vị trí xuất hiện đầu tiên của phần tử này ra, còn nếu chúng không trùng nhau, thì bỏ qua. Kết quả cuối cùng là ta có một mảng gồm có 1 cột và 1000 hàng, trong mảng này sẽ rải rác có những phần tử có giá trị rỗng và những giá trị có giá trị #NA, do số phần tử trong mảng DS có thể nhỏ hơn 1000.
DK =IF(ISNA(DK_1),"",DK_1)
Như đã nói ở trên, mảng DK_1 có thể có những phần tử có giá trị là #NA, là những giá trị không dùng để tính toán được, nên ta phải tạo thêm một mảng DK từ mảng DK_1: Mảng DK là một mảng có kích thước y như mảng DK_1 (1 cột, 1000 hàng), nhưng nếu một phần tử nào đó trong DK_1 có giá trị là #NA thì nó sẽ được gán cho một giá trị rỗng tương ứng trong mảng DK.
=IF(ROWS($1:1)>COUNT(DK),"",LOOKUP(SMALL(DK,ROWS($1:1)),DK,DS))
Nếu tổng số phần tử có giá trị khác rỗng trong mảng DK nhỏ hơn tổng số hàng tính từ hàng số 1 đến hàng chứa ô đang có công thức này, thì trả về giá trị rỗng, còn ngược lại, thì trả về phần tử trong mảng DS tại vị trí bằng với vị trí của phần tử nhỏ thứ k (với k là tổng số hàng tính từ hàng thứ 1 đến hàng chứa ô đang có công thức này) trong mảng DK.