Hàm lọc này được viết dựa trên ý tưởng nào vậy? (3 người xem)

Liên hệ QC

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

huongnvbn

Thành viên mới
Tham gia
8/6/16
Bài viết
15
Được thích
2
Xin chào các thành viên,
Có hàm này, huongnv không hiểu cách hoạt động, nhờ các thành viên chỉ giúp:

=IF(ISERR(INDEX(OS,SMALL(IF(MATCH(OS,OS,0)=ROW(INDIRECT("1:"&ROWS(OS))), MATCH(OS,OS,0),""),ROW(INDIRECT("1:"&ROWS(OS)))))),"",
INDEX(OS,SMALL(IF(MATCH(OS,OS,0)=ROW(INDIRECT("1:"&ROWS(OS))), MATCH(OS,OS,0),""),ROW(INDIRECT("1:"&ROWS(OS))))))

Hàm match, có thể sử dụng mảng OS làm lookup_value? (lạ quá)

Cụ thể là huongnv đang đọc #2 trong theard này:
https://www.giaiphapexcel.com/diendan/threads/hàm-offset-và-validation.7188/

Nhờ mọi người giải thích giúp, cám ơn mọi người.
 

File đính kèm

Xin chào các thành viên,
Có hàm này, huongnv không hiểu cách hoạt động, nhờ các thành viên chỉ giúp:

=IF(ISERR(INDEX(OS,SMALL(IF(MATCH(OS,OS,0)=ROW(INDIRECT("1:"&ROWS(OS))), MATCH(OS,OS,0),""),ROW(INDIRECT("1:"&ROWS(OS)))))),"",
INDEX(OS,SMALL(IF(MATCH(OS,OS,0)=ROW(INDIRECT("1:"&ROWS(OS))), MATCH(OS,OS,0),""),ROW(INDIRECT("1:"&ROWS(OS))))))

Hàm match, có thể sử dụng mảng OS làm lookup_value? (lạ quá)

Cụ thể là huongnv đang đọc #2 trong theard này:
https://www.giaiphapexcel.com/diendan/threads/hàm-offset-và-validation.7188/

Nhờ mọi người giải thích giúp, cám ơn mọi người.
Về trích xuất dữ liệu chỉ lấy giá trị duy nhất loại bỏ các giá trị lặp lại bạn có thể dùng công thức dưới sẽ đơn giản hơn:
Với OS là 1 Name: (nhấn Ctrl+F3 để xem), chứa Vùng: =Offset2!$A$2:$A$34
Mã:
D2=IFERROR(INDEX(OS,MATCH(0,INDEX(COUNTIF(D$1:D1,OS),0),0)),"")
Enter, fill xuống.

Thân
 

File đính kèm

Về trích xuất dữ liệu chỉ lấy giá trị duy nhất loại bỏ các giá trị lặp lại bạn có thể dùng công thức dưới sẽ đơn giản hơn:
Với OS là 1 Name: (nhấn Ctrl+F3 để xem), chứa Vùng: =Offset2!$A$2:$A$34
Mã:
D2=IFERROR(INDEX(OS,MATCH(0,INDEX(COUNTIF(D$1:D1,OS),0),0)),"")
Enter, fill xuống.

Thân
B có thể giải thích giúp mình ý tưởng của cách dùng hàm này ko? Cám ơn bạn. M tách hàm ra, mà chưa hiểu
 

File đính kèm

=IF(ISERR(INDEX(OS,SMALL(IF(MATCH(OS,OS,0)=
Hàm match, có thể sử dụng mảng OS làm lookup_value? (lạ quá)
Nhờ mọi người giải thích giúp, cám ơn mọi người.
Tôi nghĩ bạn cũng biết cách lọc duy nhất. Nếu không thì tìm kiếm cũng sẽ thấy.

Cái mà bạn quan tâm là tại sao lại Match được với lookup_value là một mảng, đúng không?

Bạn muốn hiểu bản chất cái lạ quá để áp dụng cho tương lai, đúng không?

Bạn không muốn con cá chỉ ăn được 1 lần mà muốn có cần câu để trong tương lai biết câu nhiều cá, đúng không?

MATCH(OS;OS;0) = MATCH($A$2:$A$34, $A$2:$A$34, 0)

Bình thường thì MATCH làm việc với lookup_value là 1 giá trị và trả về kết quả là 1 giá trị. Và tất nhiên bạn hiểu được vd. MATCH($A$2, $A$2:$A$34, 0), đúng không?

Bây giờ nếu bạn có MATCH($A$2:$A$34, $A$2:$A$34, 0) thì do bạn có lookup_value là 1 mảng 33 giá trị: A2, A3, ..., A34, nên giá trị trả về sẽ là mảng 33 giá trị: MATCH($A$2, $A$2:$A$34, 0) = 1, MATCH($A$3, $A$2:$A$34, 0) = 1, ..., MATCH($A$34, $A$2:$A$34, 0) = 25

Tóm lại MATCH($A$2:$A$34, $A$2:$A$34, 0) sẽ trả về mảng 33 giá trị: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25, 25, 25, 25
 
B có thể giải thích giúp mình ý tưởng của cách dùng hàm này ko? Cám ơn bạn. M tách hàm ra, mà chưa hiểu
Thường để "liệt kê loại bỏ trùng lắp", ta hay dùng 2 dạng công thức cốt lõi sau:
  1. MATCH( 'Vùng dữ liệu cần loại trùng', 'Vùng dữ liệu cần loại trùng', 0 ) = ROW($1:$n)) (Với n>= số dòng của 'Vùng dữ liệu cần loại trùng'). Nhằm tìm từng giá trị của Vùng dữ liệu, trả về số dòng trong Vùng dữ liệu so khớp nếu tìm thấy. Cuối cùng, so sánh với số thứ tự liên tục (bằng hàm ROW(1:n)), để xác định và lấy ra số dòng thỏa (thỏa=TRUE hay 1, không thỏa=FALSE hay 0)
  2. COUNTIF('Vùng liệt kê lần lượt từng thành phần','Vùng dữ liệu cần loại trùng') = 0 , tức đếm các giá trị đã xuất hiện lần lượt căn cứ trên 'Vùng dữ liệu cần loại trùng'.
Theo trên bạn thấy, không những chỉ có MATCH('Giá trị tìm',....) có thể gán dùng bằng 1 Mảng vào đối số "Giá trị tìm", mà nhiều công thức khác nữa bạn cũng đem 1 Mảng vào các đối số mà trước đây bạn cứ ngỡ rằng chỉ có "Giá trị đơn", ví dụ: trong công thức COUNTIF() trên, nó đem Vùng/Mảng "OS" vào đối số "điều kiện" mà trước đây bạn cứ ngỡ rằng chỉ có giá trị đơn được đem vào mà thôi.

Như trên đề cập, bạn đã và đang bước chạm vào "lãnh địa" công thức mảng: rất thú vị và cũng rất mệt đầu. Tuy nhiên, đến khi bạn nhìn và hiểu được nó, nó sẽ phục vụ rất tốt cho bạn trong việc bạn muốn xử lý tính toán trên cả 1 Vùng/Mảng để ra kết quả như yêu cầu.

Trong file đính kèm, tôi có giải thích cho bạn cả 4 công thức "liệt kê loại bỏ trùng lắp". Bạn cứ nghiên cứu từ từ, và tham khảo thêm 1 số bài viết trên diễn đàn về loại trùng, trong tương lai bạn sẽ nắm được "công thức mảng" và xử lý nó dễ dàng. (Đơn cử như bài "Đếm theo điều kiện loại bỏ trùng lắp", cũng có dùng dạng MATCH( 'Vùng/Mảng', 'Vùng/Mảng',) = ROW(1:n) như trên; Hoặc "Lọc dữ liệu trùng").

Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Thường để "liệt kê loại bỏ trùng lắp", ta hay dùng 2 dạng công thức cốt lõi sau:
  1. MATCH( 'Vùng dữ liệu cần loại trùng', 'Vùng dữ liệu cần loại trùng', 0 ) = ROW($1:$n)) (Với n>= số dòng của 'Vùng dữ liệu cần loại trùng'). Nhằm tìm từng giá trị của Vùng dữ liệu, trả về số dòng trong Vùng dữ liệu so khớp nếu tìm thấy. Cuối cùng, so sánh với số thứ tự liên tục (bằng hàm ROW(1:n)), để xác định và lấy ra số dòng thỏa (thỏa=TRUE hay 1, không thỏa=FALSE hay 0)
  2. COUNTIF('Vùng liệt kê lần lượt từng thành phần','Vùng dữ liệu cần loại trùng') = 0 , tức đếm các giá trị đã xuất hiện lần lượt căn cứ trên 'Vùng dữ liệu cần loại trùng'.
Theo trên bạn thấy, không những chỉ có MATCH('Giá trị tìm',....) có thể gán dùng bằng 1 Mảng vào đối số "Giá trị tìm", mà nhiều công thức khác nữa bạn cũng đem 1 Mảng vào các đối số mà trước đây bạn cứ ngỡ rằng chỉ có "Giá trị đơn", ví dụ: trong công thức COUNTIF() trên, nó đem Vùng/Mảng "OS" vào đối số "điều kiện" mà trước đây bạn cứ ngỡ rằng chỉ có giá trị đơn được đem vào mà thôi.

Như trên đề cập, bạn đã và đang bước chạm vào "lãnh địa" công thức mảng: rất thú vị và cũng rất mệt đầu. Tuy nhiên, đến khi bạn nhìn và hiểu được nó, nó sẽ phục vụ rất tốt cho bạn trong việc bạn muốn xử lý tính toán trên cả 1 Vùng/Mảng để ra kết quả như yêu cầu.

Trong file đính kèm, tôi có giải thích cho bạn cả 4 công thức "liệt kê loại bỏ trùng lắp". Bạn cứ nghiên cứu từ từ, và tham khảo thêm 1 số bài viết trên diễn đàn về loại trùng, trong tương lai bạn sẽ nắm được "công thức mảng" và xử lý nó dễ dàng. (Đơn cử như bài "Đếm theo điều kiện loại bỏ trùng lắp", cũng có dùng dạng MATCH( 'Vùng/Mảng', 'Vùng/Mảng',) = ROW(1:n) như trên; Hoặc "Lọc dữ liệu trùng").

Thân
Cám ơn Phan Thế Hiệp rất nhiều.
 
Web KT

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

Back
Top Bottom