Trợ giúp về xoá dữ liệu trùng trong excel

Liên hệ QC

vnthesis

Thành viên mới
Tham gia
11/12/10
Bài viết
11
Được thích
2
Trợ giúp về xoá dữ liệu trùng trong excel

Mình có 3 cột dữ liệu A và B và C
Cột A: Mã sản phẩm
Cột B: Tên sản phẩm
Cột C: Mã sản phẩm loại bỏ do bị lỗi.

Mình muốn xoá toàn bộ các mã sản phẩm bị lỗi kèm theo tên sản phẩm bị lỗi.

Cụ thể ý mình là như sau:

Bước 1. Nghĩa là dùng cột C đối chiếu các mã sản phẩm bị lỗi với các mã sản phẩm trùng ở cột A.
Bước 2. Xoá mã sản phẩm bị lỗi ở cột A và tên sản phẩm bị lỗi ở cột B

Ví dụ minh hoạ:

Dữ liệu ban đầu
Cột A Cột B
SP001 Sản phẩm 1
SP002 Sản phẩm 2
SP003 Sản phẩm 3
SP004 Sản phẩm 4
SP005 Sản phẩm 5
SP006 Sản phẩm 6
SP007 Sản phẩm 7
SP008 Sản phẩm 8
Cột C (cột sản phẩm bị lỗi)
SP003
SP004
SP008

Dữ liệu cần xoá đi
Cột A Cột B
SP003 Sản phẩm 3
SP004 Sản phẩm 4

SP008 Sản phẩm 8

Sau khi tìm đối chiếu với cột C và xoá dữ liệu trùng . Kết quả:
Cột A Cột B
SP001 Sản phẩm 1
SP002 Sản phẩm 2
SP005 Sản phẩm 5
SP006 Sản phẩm 6
SP007 Sản phẩm 7
 
Lần chỉnh sửa cuối:
Trợ giúp về xoá dữ liệu trùng trong excel

Mình có 3 cột dữ liệu A và B và C
Cột A: Mã sản phẩm
Cột B: Tên sản phẩm
Cột C: Mã sản phẩm loại bỏ do bị lỗi.

Mình muốn xoá toàn bộ các mã sản phẩm bị lỗi kèm theo tên sản phẩm bị lỗi.

Cụ thể ý mình là như sau:
Bước 1. Nghĩa là dùng cột C đối chiếu các mã sản phẩm bị lỗi với các mã sản phẩm trùng ở cột A.
Bước 2. Xoá mã sản phẩm bị lỗi ở cột A và tên sản phẩm bị lỗi ở cột B

Ví dụ minh hoạ:
Dữ liệu ban đầu
Cột A Cột B
SP001 Sản phẩm 1
SP002 Sản phẩm 2
SP003 Sản phẩm 3
SP004 Sản phẩm 4
SP005 Sản phẩm 5
SP006 Sản phẩm 6
SP007 Sản phẩm 7
SP008 Sản phẩm 8
Cột C (cột sản phẩm bị lỗi)
SP003
SP004
SP008

Dữ liệu cần xoá đi
Cột A Cột B
SP003 Sản phẩm 3
SP004 Sản phẩm 4
SP008 Sản phẩm 8

Sau khi tìm đối chiếu với cột C và xoá dữ liệu trùng . Kết quả:
Cột A Cột B
SP001 Sản phẩm 1
SP002 Sản phẩm 2
SP005 Sản phẩm 5
SP006 Sản phẩm 6
SP007 Sản phẩm 7
Gởi bạn một cách
Nhập dữ liệu ==> bấm nút nhé
Thân
 

File đính kèm

Có thể tách cột C độc lập trên các hàng đầu, tiêu đề giống như tiêu đề trên cột A và thực hiện lọc nâng cao, xóa kết quả lọc thì thỏa mãn yêu cầu của bạn. Tôi thấy concopgia viết macro tốt rồi, nhưng có gợi ý để bạn n/c thêm.
 
Set d = CreateObject("scripting.dictionary")

Cảm ơn bạn concopgia đã trợ giúp mình tuy nhiên sao mình bấm nút để chạy thì nó toàn báo lỗi debug

Set d = CreateObject("scripting.dictionary")

Không biết lỗi trên là lỗi gì, bạn xem và giải thích hộ mình
 
Chỉnh sửa lần cuối bởi điều hành viên:
Set d = CreateObject("scripting.dictionary")

Cảm ơn bạn concopgia đã trợ giúp mình tuy nhiên sao mình bấm nút để chạy thì nó toàn báo lỗi debug

Set d = CreateObject("scripting.dictionary")

Không biết lỗi trên là lỗi gì, bạn xem và giải thích hộ mình
Chỉ bạn cách làm bằng tay nhanh gọn (mượn file của concogia: Dữ liệu ở nằm ở cột A, B và sản phẩm hư nằm ở cột C)
- Gõ vào cell D2 công thức:
PHP:
=COUNTIF($C$2:$C$8,$A2)=0
- Vào menu Data\Filter\Advanced Filter và chọn các vùng như hình:

untitled.JPG

- Bấm OK 1 phát sẽ thấy ngay kết quả
(muốn viết thành code cũng có thể record macro quá trình làm bằng tay như tôi đã hướng dẫn ở trên)
 
Làm ơn giải thích em biết, tại sao chọn điều kiện là D1:D2 nhưng công thức chỉ đặt tại D2? Em thử chọn D2 thì lại không lọc?
 
Làm ơn giải thích em biết, tại sao chọn điều kiện là D1:D2 nhưng công thức chỉ đặt tại D2? Em thử chọn D2 thì lại không lọc?
Thì quy định của Advanced Filter nó thế mà
Có thể nói ngắn gọn thế này:
- Vùng điều kiện phải có ít nhất 2 dòng
- Với cách lọc rõ ràng theo đúng điều kiện nào đó thì cell đầu tiên của vùng điều kiện phải trùng với tiêu đề của dữ liệu, còn cell dưới là điều kiện
- Với cách lọc phức tạp, phải dùng đến công thức thì tại vùng điều kiện, cell phía trên không được trùng với dữ liệu (là cái gì cũng được, thậm chí là rổng cũng được luôn nhưng nhất định không được trùng với tiêu đề dữ liệu)
Ẹc... Ẹc... ---> Xem help
-------------------------
Advanced Filter có thể nói là gần giống với các hàm cơ sở dữ liệu (DSUM, DMAX...) ---> Tham khảo thêm cái này:
http://www.giaiphapexcel.com/forum/showthread.php?26658-DSUM-mà-không-cần-TIÊU-ĐỀ-CỘT&
 
Cũng từ công thức của Thầy Ndu, tôi chuyển qua Macro, nhưng có một số lấn cấn chưa làm được.

Mượn File của Thầy Concogia, tôi làm như sau:
PHP:
Sub LocTheoDK()
  With Sheet1
    Range(.[C2], .[C65536].End(xlUp)).Name = "Ten"
    .[D2].FormulaR1C1 = "=COUNTIF(Ten,RC1)>0"
    Range(.[a1], .[B65536].End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=.Range("D1:D2"), Unique:=False
    .[D2].ClearContents
  End With
  ActiveWorkbook.Names("Ten").Delete
End Sub

Sau khi Lọc những sản phẩm hư, tôi muốn copy qua vùng khác (từ cell A1 tại Sheet2 chẳng hạn) những cái đã lọc. Vậy code phải viết như thế nào?

1) Làm thế nào để copy toàn bộ Mã và tên sản phẩm hư đó mà không lấy tiêu đề cột (Mã, Tên) (vì sau này sẽ copy tiếp theo những sản phẩm hư khác). Bởi nếu chọn Range([A1], [B65536].End(xlUp)).Copy thì sẽ chọn luôn cả tiêu đề.

2) Delete những mã và tên sản phẩm hư đó tại vùng đã lọc rồi dồn từ dưới lên trên (không phải xóa kiểu EntireRow đâu nhé), dĩ nhiên không xóa nhầm tiêu đề gốc.

Xin cám ơn.
 

File đính kèm

Cũng từ công thức của Thầy Ndu, tôi chuyển qua Macro, nhưng có một số lấn cấn chưa làm được.

Mượn File của Thầy Concogia, tôi làm như sau:
PHP:
Sub LocTheoDK()
  With Sheet1
    Range(.[C2], .[C65536].End(xlUp)).Name = "Ten"
    .[D2].FormulaR1C1 = "=COUNTIF(Ten,RC1)>0"
    Range(.[a1], .[B65536].End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=.Range("D1:D2"), Unique:=False
    .[D2].ClearContents
  End With
  ActiveWorkbook.Names("Ten").Delete
End Sub
Sau khi Lọc những sản phẩm hư, tôi muốn copy qua vùng khác (từ cell A1 tại Sheet2 chẳng hạn) những cái đã lọc. Vậy code phải viết như thế nào?

1) Làm thế nào để copy toàn bộ Mã và tên sản phẩm hư đó mà không lấy tiêu đề cột (Mã, Tên) (vì sau này sẽ copy tiếp theo những sản phẩm hư khác). Bởi nếu chọn Range([A1], [B65536].End(xlUp)).Copy thì sẽ chọn luôn cả tiêu đề.

2) Delete những mã và tên sản phẩm hư đó tại vùng đã lọc rồi dồn từ dưới lên trên (không phải xóa kiểu EntireRow đâu nhé), dĩ nhiên không xóa nhầm tiêu đề gốc.

Xin cám ơn.
Bạn xem ở đây:
http://www.giaiphapexcel.com/forum/showthread.php?45102-Tr%E1%BB%A3-gi%C3%BAp-v%E1%BB%81-t%C3%ACm-d%E1%BB%AF-li%E1%BB%87u-tr%C3%B9ng-trong-excel (bài số 10)
Ở đó tôi có viết 1 code để remove các cell không cần thiết ---> tôi thấy nó cũng gần tương tự với bài này. Bạn nghiên cứu xem
 
Bạn xem ở đây:
http://www.giaiphapexcel.com/forum/showthread.php?45102-Trợ-giúp-về-tìm-dữ-liệu-trùng-trong-excel (bài số 10)
Ở đó tôi có viết 1 code để remove các cell không cần thiết ---> tôi thấy nó cũng gần tương tự với bài này. Bạn nghiên cứu xem

Remove theo cách của Thầy thì cũng ráng ráng nghiên như cứu, chứ copy qua vùng khác thì làm thế nào theo bài số 10 em ngu như kiến luôn!

Thầy giúp em trong trường hợp File XoaSphu2 đi ạ! Cao siêu quá nghĩ không ra!
 
Remove theo cách của Thầy thì cũng ráng ráng nghiên như cứu, chứ copy qua vùng khác thì làm thế nào theo bài số 10 em ngu như kiến luôn!

Thầy giúp em trong trường hợp File XoaSphu2 đi ạ! Cao siêu quá nghĩ không ra!
Nghiên cứu đi (làm hoài mấy bài này đâm ra lười quá)
Thuật toán cũng chỉ là:
- Tạo công thức phù hợp cho vùng điều kiện
- Dùng Advanced Filter để lọc tại chổ theo điều kiện ở trên
- Set Rng1 = vùng đang hiện bằng cách dùng SpecialCells(12)
- Show All dữ liệu
- Ẩn vùng Rng1
- Set Rng2 = vùng đang hiện bằng cách dùng SpecialCells(12)
- Hiện toàn bộ dữ liệu
===> Bây giờ ta sẽ có 2 vùng: Rng1 là các cell thỏa đ/k và Rng2 là các cell không thỏa điều kiện ---> Muốn xóa, copy hay gì gì đó thì cứ.. tùy ý thôi
(Chú ý: Nếu vừa muốn xóa và copy thì đương nhiên phải copy trước, xóa sau)
 
Lần chỉnh sửa cuối:
......... em ngu như kiến luôn!
Híc, làm "đếch" gì có con kiến "tròn ủm" như "zị"
Mà sao lại ngu như kiến, nói như thế là xúc phạm......con kiến à nha
Chưa thấy bài, nhưng nói theo MinhThien thì anh nghĩ thế này:
- Dùng AutoFilter lọc tuần tự chép sang sheet2
- Thay vì xóa, ta dùng "em - Dit to" làm điều kiện lọc, loại bỏ những mã hàng hư đi thôi, đem kết quả đi chỗ khác hoặc chép đè lên dữ liệu cũ đều được "tuốt tuồn tuột"
 
- Thay vì xóa, ta dùng "em - Dit to" làm điều kiện lọc, loại bỏ những mã hàng hư đi thôi, đem kết quả đi chỗ khác hoặc chép đè lên dữ liệu cũ đều được "tuốt tuồn tuột"
Cái vòng pho + dit to này em nghĩ chú Nghĩa làm được ---> Có lẽ chú đang nghiên cứu về Advanced Filter hay sao ấy chứ
 
Cái vòng pho + dit to này em nghĩ chú Nghĩa làm được ---> Có lẽ chú đang nghiên cứu về Advanced Filter hay sao ấy chứ

Vâng, em đang "vọc" cái Advanced Filter, nó hay cái chỗ là copy hay cut hay delete gì gì đó thì nó không bị ảnh hưởng tới vùng đang bị hide. Nhưng em không biết làm thế nào khi copy chừa lại cái tiêu đề, đừng đem cái tiêu đề qua luôn hihihi

@ concogia: kiến chúa đấy! kakakaka
 
Vâng, em đang "vọc" cái Advanced Filter, nó hay cái chỗ là copy hay cut hay delete gì gì đó thì nó không bị ảnh hưởng tới vùng đang bị hide. Nhưng em không biết làm thế nào khi copy chừa lại cái tiêu đề, đừng đem cái tiêu đề qua luôn hihihi
Thì như tôi đã nói ở trên:
- Advanced Filter TẠI CHỔ (đừng chơi chiêu lọc rồi CopyTo)
- Sau khi lọc xong, muốn copy kiểu nào mà chẳng được ---> Muốn bỏ tiêu đề thì ta Offset(1) cho nó 1 phát trước khi SpecialCells(12)
 
Thì như tôi đã nói ở trên:
- Advanced Filter TẠI CHỔ (đừng chơi chiêu lọc rồi CopyTo)
- Sau khi lọc xong, muốn copy kiểu nào mà chẳng được ---> Muốn bỏ tiêu đề thì ta Offset(1) cho nó 1 phát trước khi SpecialCells(12)

Ai chà, đúng là dùng Offset(1) !!! Em lại nghĩ vì nó ẩn nên Offset nó cũng xuống 1 hàng, rồi cũng lấy giá trị đó luôn! Trời, không thử là không biết cái hay của nó! Cám ơn Thầy nhiều! Thầy gợi ý tuyệt vời thật!
 
Xóa dữ liệu trùng và tính tổng những dòng trùng đó

Cột A Cột B(Số lượng)SP001 1SP002 2SP001 1SP002 4SP005 2SP002 3SP007 4SP001 2ThànhCột A Cột B(Số lượng)SP0014SP002 9SP005 2SP007 4
 
Lần chỉnh sửa cuối:
Xóa dữ liệu trùng và tính tổng những dòng trùng đó bằng macro

Xóa dữ liệu trùng và tính tổng những dòng trùng đó.

Mong được sự trợ giúp!
Thanks!
 

File đính kèm

Web KT

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

Back
Top Bottom