Lọc dữ liệu trùng (1 người xem)

  • Thread starter Thread starter aviaiva
  • Ngày gửi Ngày gửi
Liên hệ QC

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

aviaiva

Thành viên thường trực
Tham gia
17/8/08
Bài viết
316
Được thích
242
Các bác giải hộ em bài toán này với
 
Lần chỉnh sửa cuối:
Bạn dùng Advance filter với Unique Record Only là xong! Chiếu sáng vùng dữ liệu, sau đó vào Data/Filter/Advanced Filter.
 
Lần chỉnh sửa cuối:
cái đó thì thường quá, em muốn dùng công thức cơ
 
cái đó thì thường quá, em muốn dùng công thức cơ

Muốn cao siêu thì vào đây: Tổng hợp các phương pháp trích lọc danh sách duy nhất! Bài của hoangdanh282vnndu96081631 và nhiều bài khác nữa! Vô vàn cách cho bạn lựa chọn!

Bạn thử sức với 1 chiêu của anh ndu96081631 như sau:

Đặt 3 Name như sau:
DS = OFFSET(Sheet1!$C$7,,,COUNTA(Sheet1!$C:$C),)
DK_1 = IF(MATCH(DS,DS,0)=ROW(Sheet1!$1:$1000),ROW(Sheet1!$1:$1000),"")
DK = IF(ISNA(DK_1),"",DK_1)

Sau đó, tại cột bất kì, ví dụ H7 chẳng hạn, gõ công thức:
H7 = IF(ROWS($1:1)>COUNT(DK),"",LOOKUP(SMALL(DK,ROWS($1:1)),DK,DS))
Sau đó File công thức xuống dưới!
Bạn xem thêm file đính kèm!
 

File đính kèm

Lần chỉnh sửa cuối:
@ Aviaiva
1. Khi người ta giúp mình dù hay hay dở bạn cũng nên có lời cảm ơn (nút cảm ơn chỉ nhấn được 1 lần thôi mà).
2. Nếu muốn được giúp đỡ hoặc trao đổi tiếp Bạn có thể dùng những câu tế nhị hơn đừng để người ta cụt hứng. Bạn nên biết rằng một khi đã trả lời bài của bạn người viết bao giờ cũng chờ xem hồi âm từ bài của bạn để xem có giúp gì được cho bạn không và nhiều người khác cũng muốn giúp bạn nếu bạn thấy chưa thoả đáng nhưng nếu nhận được một câu "cái đó thường quá" thì chắc chẳng ai dám giúp bạn đâu ? Bạn là thành viên mới nên Tôi mạo muội góp ý vài câu vì khi mới tham gia diễn đàn này Tôi cũng đã có những sơ xuất như bạn.
 
Vậy là bạn muốn tìm con đường xấu nhất để đi?

cái đó thì thường quá, em muốn dùng công thức cơ
Theo mình, Adv fiter là xa lộ mà không muốn, thật hết biết!

Bạn muốn khá excel, cần phải:
* Đừng viết những câu cụt như vậy?
* Hãy trân trọng người khác trên diễn đàn, đó là tôn trọng chính mình.
* Hãy đi từ dễ đến khó trong bước đường học vấn.
* Đặt câu hỏi rõ ràng, rằng là " Lập giúp tôi danh sách duy nhất, nhưng không dùng Adv filter thì làm cách nào vậy mấy bạn"
* Cái cuối cùng mình muốn nói với bạn: Diễn đàn này rất thân thiện với nhau, giữa các thành viên. Hãy từ tốn, khi đến một nơi mới!
 
Lần chỉnh sửa cuối:

File đính kèm

Lần chỉnh sửa cuối:
cảm ơn tất cả các bác đã giúp đỡ, tất cả những bài lọc trùng đều có điểm chung là dữ liệu trùng phải nằm ở cột A dòng 1, liệu có phương pháp lọc trùng tại bất kỳ vị trí nào được không hả các bạn, mọi người cùng thảo luận thử xem.

và em muốn hỏi một câu nữa là liệu có lọc trùng trên một hàng được không?
 
cảm ơn tất cả các bác đã giúp đỡ, tất cả những bài lọc trùng đều có điểm chung là dữ liệu trùng phải nằm ở cột A dòng 1, liệu có phương pháp lọc trùng tại bất kỳ vị trí nào được không hả các bạn, mọi người cùng thảo luận thử xem.

và em muốn hỏi một câu nữa là liệu có lọc trùng trên một hàng được không?

1- Không phải bắt buộc dữ liệu trùng phải nằm ở cột A dòng 1 (ỏ các ví dụ có lẽ người viết theo thói quen làm từ cột A dòng 1 thôi), tại bất kỳ vị trí nào cũng được bạn ạ!

2- Lọc trùng trên một hàng (tức là dữ liệu trùng nằm cùng 1 hàng trên các cột khác nhau) nếu lọc bằng Advanced Filter thì có lẽ không được (theo cách hiểu của tôi về Advanced Filter) còn dùng cách khác tôi nghĩ là vẫn làm được.
 
bác có thể làm cho em một ví dụ được không, em chưa hiểu công thức, chỉ thuộc công thức thôi nên không biết làm ở cột khác như thế nào cả, bác giúp em với.
 
Trong file của Vonga đã đặt Name vùng dữ liệu là "Ma", địa chỉ tại Sheet1!$A$5:$A$12 nếu vùng dữ liệu nằm ở cột khác, dòng khác thì bạn sửa lại địa chỉ này.

Name “Stt” sử dụng công thức IF(ma="";"";IF(MATCH(ma;ma;0)=ROW(ma)-4;ROW(ma)-4;""))
Vì “ma” bắt đầu từ dòng 5 nên công thức ROW(ma)-4 ( tức là 5 – 4 = 1) có tác dụng chuyển dòng thứ 5 của sheet thành dòng 1 của bảng tính và khi kéo xuống dòng 6 thành dòng 2 …
Ví dụ vùng dữ liệu của bạn bắt đầu từ dòng 10 thì sửa công thức IF(ma="";"";IF(MATCH(ma;ma;0)=ROW(ma)-9;ROW(ma)-9;""))

Công thức lọc vẫn là IF(COUNT(stt)<ROW(1:1);"";INDEX(ma;SMALL(stt;ROW(1:1));1))
bạn đặt ở bất kỳ cột nào cũng được nhưng phải bắt đầu cùng hàng với dữ liệu (ví dụ đây là bắt đầu từ dòng 10).

Bạn tự làm thử nhé!
 
Bạn thử sức với 1 chiêu của anh ndu96081631 như sau:

Đặt 3 Name như sau:
!
Kiệt ơi, chỉ cần 2 name thôi:
PHP:
DS =OFFSET($C$7,,,MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)),)

PHP:
DK =IF(DS="","",IF(MATCH(DS,DS,0)=ROW(INDIRECT("1:"&ROWS(DS))),ROW(INDIRECT("1:"&ROWS(DS))),""))
Vừa đầy đủ (tại ngày trước... NGU... Ẹc... Ẹc...)
Với 2 name này, bất chấp luôn trong dử liệu có dòng rổng
Mỗi người có mỗi cách làm riêng! Nhưng sau khi làm xong, các bạn Test thử thành quả của mình bằng cách:
- Quét chọn vùng dử liệu nguồn
- Kéo dử liệu nguồn ra nơi khác (chẳng hạn, gốc của nó là A2:A20, giờ kéo nó qua C5:C23)
- Kiểm tra lại kết quả của công thức ---> Xem chúng có bị "loạn xà ngầu" không (Nếu kết quả vẫn không đổi, xem như bạn thành công)
- Test thêm 1 chiêu nữa: Chèn dòng, xóa dòng, chèn cột, xóa cột ---> Xem kết quả công thức
 

File đính kèm

Lần chỉnh sửa cuối:
Bác ndu96081631 quá pro, rất cảm ơn bác, em làm được rồi, bác có thể chỉ cho em cách lọc dữ liệu trùng theo hàng ngang được không, em thử giữ nguyên hai name thay row = hàm column nhưng không được.
 
Lần chỉnh sửa cuối:
Bác ndu96081631 quá pro, rất cảm ơn bác, em làm được rồi, bác có thể chỉ cho em cách lọc dữ liệu trùng theo hàng ngang được không, em thử giữ nguyên hai name thay row = hàm column nhưng không được.
Bạn vui lòng nói rõ: Dử liệu gốc của bạn nằm hàng ngang? Hay bạn muốn sau khi lọc ra, xếp chúng thành hàng ngang (điều này rất quan trọng, phải xác nhận trước mới làm được)
Tôi làm thử cho bạn trường hợp: Dử liệu gốc nằm hàng ngang, trích lọc ra cũng hàng ngang
Mấu chốt phải sửa trong công thức là ở:
- Tham số của OFFSET
- TRANSPOSE
- COLUMNS
Bạn xem file rồi tùy biến theo ý muốn nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Bác ndu96081631 làm cho em ví dụ đúng luôn cái em cần cảm ơn bác lắm lắm.
 
Kiệt ơi, chỉ cần 2 name thôi:
PHP:
DS =OFFSET($C$7,,,MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)),)

PHP:
DK =IF(DS="","",IF(MATCH(DS,DS,0)=ROW(INDIRECT("1:"&ROWS(DS))),ROW(INDIRECT("1:"&ROWS(DS))),""))
Vừa đầy đủ (tại ngày trước... NGU... Ẹc... Ẹc...)
Với 2 name này, bất chấp luôn trong dử liệu có dòng rổng
Mỗi người có mỗi cách làm riêng! Nhưng sau khi làm xong, các bạn Test thử thành quả của mình bằng cách:
- Quét chọn vùng dử liệu nguồn
- Kéo dử liệu nguồn ra nơi khác (chẳng hạn, gốc của nó là A2:A20, giờ kéo nó qua C5:C23)
- Kiểm tra lại kết quả của công thức ---> Xem chúng có bị "loạn xà ngầu" không (Nếu kết quả vẫn không đổi, xem như bạn thành công)
- Test thêm 1 chiêu nữa: Chèn dòng, xóa dòng, chèn cột, xóa cột ---> Xem kết quả công thức
Thày ơi các công thức của thày DS =OFFSET($C$7,,,MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)),) đoạn em bôi đậm có nghĩa là gì ạh? Trong lạ mắt quá, em chẳng hiểu gì cả.
 
Thày ơi các công thức của thày DS =OFFSET($C$7,,,MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)),) đoạn em bôi đậm có nghĩa là gì ạh? Trong lạ mắt quá, em chẳng hiểu gì cả.
Thì vầy:
OFFSET($C$7,,,1000,) tương đương với $C$7:$C$1006
MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)) tương đương với MATCH(REPT("Z",255),$C$7:$C$1006))
Thế thôi
 
Kiệt ơi, chỉ cần 2 name thôi:
PHP:
DS =OFFSET($C$7,,,MATCH(REPT("Z",255),OFFSET($C$7,,,1000,)),)

PHP:
DK =IF(DS="","",IF(MATCH(DS,DS,0)=ROW(INDIRECT("1:"&ROWS(DS))),ROW(INDIRECT("1:"&ROWS(DS))),""))
Vừa đầy đủ (tại ngày trước... NGU... Ẹc... Ẹc...)
Với 2 name này, bất chấp luôn trong dử liệu có dòng rổng
Mỗi người có mỗi cách làm riêng! Nhưng sau khi làm xong, các bạn Test thử thành quả của mình bằng cách:
- Quét chọn vùng dử liệu nguồn
- Kéo dử liệu nguồn ra nơi khác (chẳng hạn, gốc của nó là A2:A20, giờ kéo nó qua C5:C23)
- Kiểm tra lại kết quả của công thức ---> Xem chúng có bị "loạn xà ngầu" không (Nếu kết quả vẫn không đổi, xem như bạn thành công)
- Test thêm 1 chiêu nữa: Chèn dòng, xóa dòng, chèn cột, xóa cột ---> Xem kết quả công thức
Thưa thày có lẽ do trước kia em chưa va chạm đến công thức mảng nên phần nào bị choáng khi đụng phải vấn đề này, cả chiều nay em nghịch trên máy và đã phần nào hình dung ra phương pháp thuật toán nhưng chưa được tường minh rõ lắm, xin thày giải thích hộ em ý nghĩa của cụm từ: DK =IF(DS="","",IF(MATCH(DS,DS,0)=ROW(INDIRECT("1:"&ROWS(DS))),ROW(INDIRECT("1:"&ROWS(DS))),"")); em phần nào hiểu được tư duy bản chất của bài toán chủ yếu nằm ở đoạn bôi đỏ nhưng không thể nào toát ra hết ý được; xin thày chỉ giáo cho em nếu trong đoạn đỏ ta bỏ hàm Indirect đi thì ảnh hưởng gì đến kết quả bài toán.
 
Mình hiểu sao thì viết vậy nhe .
+ Bạn thử tách đoạn
=MATCH(DS,DS,0) để vào D7 => Enter.sau đó Ctrl + D Xuống tới D21 kết quả ra số rồi lỗi tùm lum . để đó
+ Tiếp tục tách lấy đoạn
Mã:
=IF(MATCH(DS,DS,0)=ROW(INDIRECT("1:"&ROWS(DS))),ROW(INDIRECT("1:"&ROWS(DS))),"")
để vào E7 đến E21 => Ctrl + Shift + Enter
Lúc này bạn nhìn hai cột D và E bạn có thấy gì không ?
Name DK có nội dung như thế này theo mình hiểu nhe
Nếu danh sách bằng rổng thỉ rổng ,Nếu tìm vị trí dòng trong danh sách bằng với vị trí dòng trong ROW(INDIRECT("1:"&ROWS(DS))) thì trả ra vị trí dòng đó .
Nói thêm về đoạn ROW(INDIRECT("1:"&ROWS(DS))),suy cho cùng đoạn này chỉ trả về số dòng của danh sách bạn đang làm mà thôi ,( Ở đây là 15 dòng )
Tiếp .
Mình có chép công thức ( Name DK) cho bạn xem đó ( Cột G ).Bây giờ bạn quét chọn phần MATCH(DS,DS,0) ,rồi nhấn F9 xem ,để ý cho kỷ nhe ,có số rồi có lỗi nữa .
{1;1;3;3;5;6;#N/A;#N/A;9;#N/A;#N/A;#N/A;1;#N/A;15}
Sau đó chọn đoạn ROW(INDIRECT("1:"&ROWS(DS))) nhấn F9 tiếp kế quả là
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}
Lấy hai kết quả đó so sánh từng phần tử với nhau được
{TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;#N/A;#N/A;TRUE;#N/A;#N/A;#N/A;FALSE;#N/A;TRUE}
TRUE là đúng
FALSE là sai
Xem lại phần trên ,nếu đúng thì trả về vị trí dòng đó .
Có gì các sư huynh chỉ em thêm nhe
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom