tìm và xóa dữ liệu trùng

Liên hệ QC

giaosy

Thành viên thường trực
Tham gia
6/12/06
Bài viết
205
Được thích
144
Các bác hướng dẫn em làm thế nào để đánh dấu X vào bên cạnh những dòng có dữ liệu trùng nhau, sau đó chọn và xóa cả dòng có đánh dấu X đi.
em chỉ có thể đánh dấu X vào 2 dòng có dữ liệu giống nhau, còn 3 dòng liên tiếp trở lên thì chịu. hix
em gửi kèm file theo, mong các bác giúp đỡ
 

File đính kèm

  • timxoa.xls
    26 KB · Đọc: 88
Các bác hướng dẫn em làm thế nào để đánh dấu X vào bên cạnh những dòng có dữ liệu trùng nhau, sau đó chọn và xóa cả dòng có đánh dấu X đi.
em chỉ có thể đánh dấu X vào 2 dòng có dữ liệu giống nhau, còn 3 dòng liên tiếp trở lên thì chịu. hix
em gửi kèm file theo, mong các bác giúp đỡ
Vấn đề là bạn muốn xóa trùng thì cũng giữ lại 1 cái duy nhất chớ.
B1=IF(COUNTIF($A$1:$A1,$A1)>1,"x",1)
Copy xuống, sau đó AutoFilter nếu x thì xóa.
Hay bạn muốn dùng VBA, nhớ rằng nếu dùng VBA thì nên co1 dòng tiêu đề. Cũng như dele duplicate trong Excel 2007 cũng nên có dòng tiêu đề.
 

File đính kèm

  • Tim_Xoa.rar
    9 KB · Đọc: 166
Lần chỉnh sửa cuối:
Upvote 0
Chỉ cần dùng if là đủ, không cần dùng countif.
 

File đính kèm

  • timxoa.xls
    24 KB · Đọc: 106
Upvote 0
rất cảm ơn các bác, em đã tìm ra cách giải quyết vấn đề như thế này. trước khi đó phải sort dữ liệu như bác hoangdanh đã nói
Mã:
Sub tim()
    For Each cell In Selection
                 If cell.Value = cell.Offset(1, 0).Value Then
                  cell.Offset(0, 8).Value = "X"
                       Range("A1").Select
                   Selection.AutoFilter
                       ActiveSheet.Range("$A$1:$I$15").AutoFilter Field:=9, Criteria1:="<>"
                       Rows("2:12").Select
                                 Selection.Delete Shift:=xlUp
                                 ActiveSheet.Range("$A$1:$I$8").AutoFilter Field:=9
                       Range("A2").Select
              End If
     Next
End Sub
trường hợp lọc cho 3 dòng trùng nhau thì thêm một vòng if then else .... nữa là ok
mong các bác góp ý
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Theo như bạn mô tả thì:
- Tìm xem trong cột dử liệu, nếu có trùng thì đánh dấu X (sang phải 8 cột)
- Sau khi đánh dấu xong sẽ xóa sạch nhưng dòng này ---> Tức chỉ lấy em nào không trùng
Vậy tôi nghĩ code phải là vầy chứ:
PHP:
Sub Tim()
  Dim Clls As Range
  With Selection
    For Each Clls In .Cells
      If WorksheetFunction.CountIf(.Cells, Clls) > 1 Then
        Clls.Offset(, 8).Value = "X"
      End If
    Next
    .Offset(, 8).SpecialCells(2).EntireRow.Delete
  End With
End Sub
Cần chi AutoFilter... cũng đâu cần Sort
???
Nói thêm:
- Tôi thấy dùng Selection nguy hiểm quá... Lở quên chọn hoặc ActiveCell đang ở nơi nào đó thì chả biết điều gì xảy ra
- Vậy tại sao không xác định chính xác là vùng nào? Hoặc dùng InputBox để chọn vùng chẳng hạn
 
Lần chỉnh sửa cuối:
Upvote 0
To Ndu...
Code của anh xoá cả toàn bộ dữ liệu bị trùng, theo yêu cầu là phải để lại 1 dòng.
 
Lần chỉnh sửa cuối:
Upvote 0
To Ndu...
Code của anh xoá cả toàn bộ dữ liệu bị trùng, theo yêu cầu là phải để lại 1 dòng.
Đó là tôi hiểu theo như những gì tác giã mô tả: Trùng là xóa sạch
Còn nếu để lại 1 dòng thì cần gì code ---> Advanced Filter\Unique Records Only hoặc Remove Duplicate là ra
 
Upvote 0
thank bác ndu đoạn code của em là sau khi đặt X vào dòng có dữ liệu trùng thì dùng filter chọn những dòng có dấu X để xóa thôi chứ không phải là xóa sạch --=0
 
Upvote 0
Hi, nếu yêu cầu gần giống như vậy nhưng chỉ bôi màu tất cả các ô bị trùng thì sẽ phải thay đổi code như thế nào vậy. Khi chạy code này sẽ hiện lên một box chọn cột dữ liệu để tìm giá trị trùng rồi mới chạy. Mọi người giúp đỡ nhé
 
Upvote 0
A, với code này bạn có thể chọn đa cột luôn và liên tục hay không cũng không thành vấn đề. Tuyệt chưa!
PHP:
Sub chay() On Error GoTo Loi Dim vung As Range, mng As Range, k As Long Set vung = Application.InputBox("Chon cot:", "thong bao", Type:=8) For Each mng In vung.Areas() k = Cells(60000, mng.Column).End(xlUp).Row For i = 1 To k     If WorksheetFunction.CountIf(Range(Cells(1, mng.Column), Cells(k, mng.Column)), Cells(i, mng.Column)) > 1 Then         Cells(i, mng.Column).Interior.ColorIndex = 36       'Chon so mau minh thich     End If Next Next Loi: End End Sub
Thân.
 

File đính kèm

  • thu.rar
    7.6 KB · Đọc: 112
Lần chỉnh sửa cuối:
Upvote 0
Hi, nếu yêu cầu gần giống như vậy nhưng chỉ bôi màu tất cả các ô bị trùng thì sẽ phải thay đổi code như thế nào vậy. Khi chạy code này sẽ hiện lên một box chọn cột dữ liệu để tìm giá trị trùng rồi mới chạy. Mọi người giúp đỡ nhé
Yêu cầu này dùng Conditional Formating sẽ "sướng" hơn là VBA đấy
Tùy chuyện mà code chứ
 
Upvote 0
Hình như bạn quên thêm hai dấu nháy vào phần chọn mầu nên báo lỗi. Mình cho thêm vào là chạy ngon rùi.

Thanks!
 

File đính kèm

  • error.JPG
    error.JPG
    68.2 KB · Đọc: 96
Lần chỉnh sửa cuối:
Upvote 0
Bạn thêm 1 dấu phẩy (') trước chữ "Chọn" là được. Hoặc bạn mở file của mình ra, nhấn Alt + F11 sẽ thấy.
Mã:
[FONT=Courier New][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]mng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Column[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Interior[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]ColorIndex [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]36       [COLOR=teal][COLOR=seagreen]'Chon so mau minh th[/COLOR]ich[/COLOR][/COLOR][/FONT]
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Phê bình GiaoSi đó nha!

thank bác ndu, đoạn code của em là sau khi đặt X vào dòng có dữ liệu trùng thì dùng filter chọn những dòng có dấu X để xóa thôi chứ không phải là xóa sạch --=0
Với ví dụ trong file đưa ra ở bài 1, hiểu như cách của NDU - xóa sạch là đúng;
Nếu như cách viết như thế này, thì phải đưa ra ví dụ như sau:
| A | B | C |
|1|||
|1| X ||
|1| X ||
|1| X ||
|2||Đề bài: Xin các bạn xóa giúp các records có dấu ' X '|
|3|||
|3| X ||
|4|||

Thì mới đúng, phải vậy không!

Hướng giải quyết, theo mình:
1*/ Lập DS (danh sách) duy nhất; sau đó đối chiếu giữa 2 DS & đánh dấu vô DS ban đầu, những records nào không có trong DS duy nhất thì xóa đi. Cái này đã có trên diễn đàn. Bạn tìm thử xem; Nếu không thấy, chúng ta lại tiếp tục.
2*/ Làm 1 macro tìm kiếm để tìm những records khác nó nhưng trùng dữ liệu với nó thì xóa đi. Hướng này có thể tham khảo phương thức Rng.FIND(what:=. . . ); Nếu có tín hiệu bí từ bạn, ta sẽ tiếp tục sau! Chờ tin bạn
Thân ái & đừng zận!:-=
 
Lần chỉnh sửa cuối:
Upvote 0
to bác ChanhTQ@,
em đâu có nhầm vì đoạn code của em chỉ đánh dấu 1 trong 2 dòng dữ liệu bị trùng chứ có đánh dấu cả hai dòng dữ liệu trùng đâu.--=0.
Vì cái đoạn code này dùng cho một vùng dữ liệu rất lớn với excel nên nếu tạo ra bảng để so sánh thì tốc độ giải quyết rất chậm. vì vậy em cần khi nó phát hiện ra ô có dấu "X" thì nó delete cả cái dòng đó luôn.
em đang nghiên cứu hướng dẫn của các bác. Nhưng hình như vì dữ liệu quá lớn nên excel cũng không search hết được, phải làm nhiều lần mới được.
thanks, mong các bác hướng dẫn tiếp.
p/s em ghép cái code của bác ndu vào cái code kia thế là ok (đã xong)
rất cảm ơn các bác
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu bạn sử dụng MS 2007, muốn xóa dữ liệu trùng thì lại càng đơn giản hơn, khỏi phải dùng code.
* Tô khối vùng dữ liệu
* Vào gờ Data/ chọn Remove Duplicates
* Trong hộp hội thoại tùy bạn chọn cột mà bạn muốn xóa dữ liệu trùng (ĐK là nhiều cột hay 1 cột tùy bạn chọn). Sau cùng OK một phát là xong.
 
Upvote 0
Nếu bạn sử dụng MS 2007, muốn xóa dữ liệu trùng thì lại càng đơn giản hơn, khỏi phải dùng code.
* Tô khối vùng dữ liệu
* Vào gờ Data/ chọn Remove Duplicates
* Trong hộp hội thoại tùy bạn chọn cột mà bạn muốn xóa dữ liệu trùng (ĐK là nhiều cột hay 1 cột tùy bạn chọn). Sau cùng OK một phát là xong.
Tác giã có đòi xóa dử liệu trùng theo kiểu bạn đang nghĩ đâu mà Remove Duplicate chứ
 
Upvote 0
Web KT
Back
Top Bottom