Xóa dữ liệu trùng theo điều kiện lọc

Liên hệ QC

satthuvae

Thành viên thường trực
Tham gia
12/3/09
Bài viết
381
Được thích
52
Dear Các anh/chị
Em có file excel nhờ anh/chị các bạn chỉ giùm cách kỹ thuật nào xóa dòng trùng theo điều kiện lọc cho sẵn trước không.
Điều kiện cho sẵn là cột B, nội dung em lọc là " chuyền tiền nội bộ", sau đó có em muốn xóa các dòng mà trùng nhau, do em làm thủ công thường là nhìn bằng mắt thường, em sẽ tô mầu vàng 1 dòng khi phát hiện giống nhau. Sau đó lọc mầu vàng và thực hiện xóa các dòng đó.
Việc làm này em thưc hiện rất thủ công, các bạn xem có cách nào giúp mình đỡ phải thực hiện thủ công hay không.
Em xin cám ơn à.
 

File đính kèm

Dear Các anh/chị
Em có file excel nhờ anh/chị các bạn chỉ giùm cách kỹ thuật nào xóa dòng trùng theo điều kiện lọc cho sẵn trước không.
Điều kiện cho sẵn là cột B, nội dung em lọc là " chuyền tiền nội bộ", sau đó có em muốn xóa các dòng mà trùng nhau, do em làm thủ công thường là nhìn bằng mắt thường, em sẽ tô mầu vàng 1 dòng khi phát hiện giống nhau. Sau đó lọc mầu vàng và thực hiện xóa các dòng đó.
Việc làm này em thưc hiện rất thủ công, các bạn xem có cách nào giúp mình đỡ phải thực hiện thủ công hay không.
Em xin cám ơn à.
Bạn phải định nghĩa thế nào là 2 dòng trùng nhau.
 
Ý mình à trùng nhau về các cột, trừ cột thứ tự, bạn xem dòng mình bôi vàng đó là có dòng mình trùng, lên mình pải bôi vàng sau đó mình xóa những dòng đó.
Cám ơn bạn.
Nếu định nghĩa như vậy thì dữ liệu của bạn chả có dòng nào có nội dung 'Chuyển tiền nội bộ' mà trùng nhau cả (xem lại cột AC).
 
Bạn chọn một cột mà bạn cần xóa chọn cột C "số chứng từ" rồi Bạn vào Data chọn mục Remove Duplicates, sẽ xóa hết dữ liệu trùng.
 
Bạn chọn một cột mà bạn cần xóa chọn cột C "số chứng từ" rồi Bạn vào Data chọn mục Remove Duplicates, sẽ xóa hết dữ liệu trùng.
Cám ơn bạn, mình cũng đã làm theo cách này, nhưng có một điểm là cột C đó ngoài ra có rất nhiều loại chứng từ khác, khi đó máy sẽ xóa cả những chứng từ giống nhau, nhưng cột C không thỏa mãn điều kiện " chỉ lọc" duy nhất cột C theo nôi dung " chuyền tiền nội bộ"

Cám ơn bạn.
 
Code dưới cho dữ liệu có sẵn trong File của bạn:
PHP:
Sub abc()
 Dim Cll As Range
   Application.ScreenUpdating = False
    Range("b1").AutoFilter Field:=2, Criteria1:="Chuy?n ti?n n?i b?"
    For Each Cll In Range("B19:M4000")
        If Cll.Interior.ColorIndex = 6 Then
            Cll.EntireRow.Delete
        End If
    Next Cll
    Application.ScreenUpdating = True
End Sub
 
Code dưới cho dữ liệu có sẵn trong File của bạn:
PHP:
Sub abc()
 Dim Cll As Range
   Application.ScreenUpdating = False
    Range("b1").AutoFilter Field:=2, Criteria1:="Chuy?n ti?n n?i b?"
    For Each Cll In Range("B19:M4000")
        If Cll.Interior.ColorIndex = 6 Then
            Cll.EntireRow.Delete
        End If
    Next Cll
    Application.ScreenUpdating = True
End Sub

Cám ơn bạn, ngoài cách sử dụng code không biết có cách nào đơn giản hơn không, vì không làm cố định trên 1 file, mỗi một dữ liệu của khách hàng khác mình lại sử dùng file khác nhau do đó khi làm code sẽ copy như vậy cũng không ổn lắm.

Cám ơn bạn.
 
Cám ơn bạn, ngoài cách sử dụng code không biết có cách nào đơn giản hơn không, vì không làm cố định trên 1 file, mỗi một dữ liệu của khách hàng khác mình lại sử dùng file khác nhau do đó khi làm code sẽ copy như vậy cũng không ổn lắm.

Cám ơn bạn.
Bạn đọc lại bài #2 đi, mục tiêu rõ ràng chắc sẽ có cách giả quyết.
 
Bạn đọc lại bài #2 đi, mục tiêu rõ ràng chắc sẽ có cách giả quyết.

Mình cám ơn các bạn. Như File mình đính kèm, mình đang hiểu trùng nhau ( Ý mình File này mình chỉ lọc điều kiện cột B là " Chuyển tiền nội bộ" khi đó sẽ lọc ra, sau đó mình muốn khừ đi những ô mà bị trùng theo điều kiện lọc này"

Như theo file thì dòng 19, 20 là 2 dòng giống hết nhau về tất cả các trường, trừ trường cột STT, do đó mình làm thủ công nhìn thấy trùng nhau như vậy mình sẽ tô dòng 20 mầu vàng.
Tiếp tục dòng 134 và 135 mình thấy trùng, mình lại tô dòng 135 mầu vàng...
Cứ tiếp tục như vậy, mình sẽ tô các ô mầu vàng, sau đó mình lọc và xóa đi.
Mình làm như vậy rất mất thời gian, các bạn có ý nào giúp mình đỡ thao tác này đi không à.

Mình xin cám ơn.
 
Mình cám ơn các bạn. Như File mình đính kèm, mình đang hiểu trùng nhau ( Ý mình File này mình chỉ lọc điều kiện cột B là " Chuyển tiền nội bộ" khi đó sẽ lọc ra, sau đó mình muốn khừ đi những ô mà bị trùng theo điều kiện lọc này"

Như theo file thì dòng 19, 20 là 2 dòng giống hết nhau về tất cả các trường, trừ trường cột STT, do đó mình làm thủ công nhìn thấy trùng nhau như vậy mình sẽ tô dòng 20 mầu vàng.
Tiếp tục dòng 134 và 135 mình thấy trùng, mình lại tô dòng 135 mầu vàng...
Cứ tiếp tục như vậy, mình sẽ tô các ô mầu vàng, sau đó mình lọc và xóa đi.
Mình làm như vậy rất mất thời gian, các bạn có ý nào giúp mình đỡ thao tác này đi không à.

Mình xin cám ơn.
Chào satthuvae,

Bạn chọn toàn bộ dữ liệu có trong bảng A2:AN3133, vào Data nhấn Remove Duplicates, rồi chọn Unselect All, rồi chỉ tick chọn ô "Loại chứng từ" và "số chứng từ", xong nhấn OK. (Bạn xem hình đính kèm)
RemoveDuplicates.jpg


Chúc bạn ngày vui.
 
Cám ơn bạn, ngoài cách sử dụng code không biết có cách nào đơn giản hơn không, vì không làm cố định trên 1 file, mỗi một dữ liệu của khách hàng khác mình lại sử dùng file khác nhau do đó khi làm code sẽ copy như vậy cũng không ổn lắm.

Cám ơn bạn.
Bạn tham khảo Code sau, áp dụng cho Sheet hiện hành.
Đối với dữ liệu của bạn, đầu tiên bạn bỏ AutoFilter đi ---->Chạy Code --->AutoFilter lại( các mục trong cột B)
PHP:
Sub DeleteRows_Thuxem() 
    Dim i As Long, k As Long
    Dim a As Variant
    Dim Rng As Range
    Application.ScreenUpdating = False
    Set Rng = Application.Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns(ActiveCell.Column))
    k = 0
    For i = Rng.Rows.Count To 2 Step -1
        a = Rng.Cells(i, 1).Value
        If a = vbNullString Then
            If Application.WorksheetFunction.CountIf(Rng.Columns(1), vbNullString) > 1 Then
                Rng.Rows(i).EntireRow.Delete
                k = k + 1
            End If
        Else
            If Application.WorksheetFunction.CountIf(Rng.Columns(1), a) > 1 Then
                Rng.Rows(i).EntireRow.Delete
                k = k + 1
            End If
        End If
    Next i
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

Chào bạn, bạn chọn hết dữ liệu và vào mục Data chọn mục Remove Duplicates, sao đó bạn chọn những tiêu đề mà bạn cần xóa trùng, Mình nghĩ chỉ có cách này thôi hoặc là VBA mới xóa nhanh được , không thì bạn phải dùng thủ công thôi, bạn chon hết vùng dữ liệu và vào custome sort bạn sort " loại chứng từ" theo từ A-Z, sau đó bạn sẽ xóa nhanh hơn là tô màu
 
Chào satthuvae,

Xin lỗi bạn, cách ở đoạn #11 mình đưa ra cũng không chính xác lắm, bạn thử thêm cách này mình đã dùng xem sao nha:
Đứng tại B2, chọn Conditional Formating/New Rule, đánh vào:
Mã:
=($B2="chuyển tiền nội bộ")*MATCH(B2&C2,$B3:$B$4000&$C3:$C$4000,0)>0
Chọn Fill màu tùy ý bạn, chọn Applies to: =$B$2:$B$4000 (chú ý đến những dấu $)

Đứng tại C2, chọn Conditional Formating/New Rule, đánh vào:
Mã:
=($B2="chuyển tiền nội bộ")*MATCH(C2,C3:$C$4000,0)>0
Chọn Fill màu tùy ý bạn, chọn Applies to: =$C$2:$C$4000

Sau đó bạn ra ngoài bảng, filter cột B các mục "Chuyển tiền nội bộ", rồi "filter by color" cột C chọn No fill, Chọn toàn bộ dòng sau khi filter, nhấn Alt + ";" rồi nhấn Ctrl + "-", sẽ xóa hết toàn bộ các dòng trùng.

Chúc bạn ngày vui.
 
Lần chỉnh sửa cuối:
Chào satthuvae,

Thêm một cách nữa mà không cần dùng đến "Conditional Formatting":
Bạn đánh công thức tại AO2:(công thức mảng)
Mã:
=($B2="Chuyển tiền nội bộ")*SUM(--(($B$2:$B2&$C$2:$C2)=$B2&$C2))
nhấn Ctrl+Shift+Enter rồi copy xuống các dòng dưới. Filter cột AO chọn những giá trị >1, rồi delete.

Chúc bạn ngày vui
 
Mình sửa CT của anh quocgiacan, khỏi phải CTrl+Shift+Enter
CT tại AO2:
Mã:
[COLOR=#000000]AO2[/COLOR]=COUNTIFS($B$2:B2,B2,$C$2:C2,C2)*(B2="Chuyển tiền nội bộ")

Fill xuống, rồi bạn fillter cột AO2, lọc những giá trị >1, rồi delele!!

 
Lần chỉnh sửa cuối:
Mình sửa CT của anh quocgiacan, khỏi phải CTrl+Shift+Enter
CT tại AO2:
Mã:
[COLOR=#000000]AO2[/COLOR]=COUNTIFS($B$2:B2,B2,$C$2:C2,C2)*(B2="Chuyển tiền nội bộ")

Fill xuống, rồi bạn fillter cột AO2, lọc những giá trị >1, rồi delele!!

Chào lenongree,

Rất vui gặp lại lenongree và cảm ơn vì quan tâm.

Hàm SUM() của anh nếu thay bằng SUMPRODUCT() cũng không dùng Ctrl+Shift+Enter phải không!
Hi, hi, anh cũng giống em, đếm thấy nó dài quá so với SUM() nên thà rằng nhấn Ctrl+Shift+Enter còn hơn dài. :-)

Nhưng Countifs() của em gọn hơn.

Chúc lenongree một ngày thật vui.
 
Lần chỉnh sửa cuối:
Chào lenongree,

Rất vui gặp lại lenongree và cảm ơn vì quan tâm.

Hàm SUM() của anh nếu thay bằng SUMPRODUCT() cũng không dùng Ctrl+Shift+Enter phải không!
Hi, hi, anh cũng giống em, đếm thấy nó dài quá so với SUM() nên thà rằng nhấn Ctrl+Shift+Enter còn hơn dài. :-)

Nhưng Countifs() của em gọn hơn.

Chúc lenongree một ngày thật vui.

Cám ơn mọi người rất nhiều à, em đã làm được rùi à.
 
Web KT

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

Back
Top Bottom