Lọc dữ liệu trùng theo điều kiện (2 người xem)

Liên hệ QC

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

nhathuyha

Thành viên mới
Tham gia
9/3/16
Bài viết
26
Được thích
0
Chào các thầy cùng các anh chị trong diễn đàn!

mọi người có thể giúp em lọc bỏ những dòng dữ liệu bị trùng sao cho dòng nào có "time" lớn hơn thì dữ lại,
còn những dòng có "time" nhỏ hơn thì xóa đi..Mình có tạo 1 nút bấm ở sheet 1.Bấm vào là chạy thôi
các anh chị để ý một chút thì thấy rằng cột E là cột Time.. thật ra em đã chuyển nó qua dạng số rồi.. Vd nhé.. số seri bị trùng là 1234 có số lần bị trùng là 3 lần thì nó lấy lần có giá trị "time" lớn nhất giữ lại và xóa dòng của 2 dữ liệu kia
Lưu ý 1 chút là dữ liệu này có thể trùng nhiều lần và chỉ lấy 1 dòng duy nhất có "time" lớn nhất thôi.

Chân thành cảm ơn các thầy cùng các anh chị trong diễn đàn
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các thầy cùng các anh chị trong diễn đàn!
mọi người có thể giúp em lọc bỏ những dòng dữ liệu bị trùng sao cho dòng nào có "time" lớn hơn thì dữ lại,
còn những dòng có "time" nhỏ hơn thì xóa đi..Mình có tạo 1 nút bấm ở sheet 1.Bấm vào là chạy thôi
các anh chị để ý một chút thì thấy rằng cột E là cột Time.. thật ra em đã chuyển nó qua dạng số rồi.. Vd nhé.. số seri bị trùng là 1234 có số lần bị trùng là 3 lần thì nó lấy lần có giá trị "time" lớn nhất giữ lại và xóa dòng của 2 dữ liệu kia
Lưu ý 1 chút là dữ liệu này có thể trùng nhiều lần và chỉ lấy 1 dòng duy nhất có "time" lớn nhất thôi.
Chân thành cảm ơn các thầy cùng các anh chị trong diễn đàn
bạn chay code sau
Mã:
Public Sub XoaTrung()
Dim Dic As Object, Darr(), i As Long, tmp As String
Darr = Sheets("Data").Range("A1", Sheets("Data").Range("E65500").End(xlUp)).Value
ReDim Arr(1 To UBound(Darr), 1 To 5)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Darr)
    tmp = Darr(i, 1)
    If Not Dic.Exists(tmp) Then
        Dic.Add tmp, Darr(i, 5)
    Else
        If Darr(i, 5) > Dic.Item(tmp) Then Dic.Item(tmp) = Darr(i, 5)
    End If
Next i
With Sheets("Sheet1")
    .Range("A2", .Range("B65500").End(xlUp)).ClearContents
    .Range("A2").Resize(Dic.Count, 1) = WorksheetFunction.Transpose(Dic.keys)
    .Range("B2").Resize(Dic.Count, 1) = WorksheetFunction.Transpose(Dic.items)
End With
Set Dic = Nothing
End Sub
 

File đính kèm

Upvote 0
bạn chay code sau
Mã:
    .Range("A2").Resize(Dic.Count, 1) = [COLOR=#ff0000]WorksheetFunction.Transpose[/COLOR](Dic.keys)
    .Range("B2").Resize(Dic.Count, 1) = WorksheetFunction.Transpose(Dic.items)
Em không chắc chắn (vì không nắm rõ) nhưng nên dùng Application.Transpose() hơn.
 
Upvote 0
bạn chay code sau
Mã:
Public Sub XoaTrung()
Dim Dic As Object, Darr(), i As Long, tmp As String
Darr = Sheets("Data").Range("A1", Sheets("Data").Range("E65500").End(xlUp)).Value
ReDim Arr(1 To UBound(Darr), 1 To 5)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Darr)
    tmp = Darr(i, 1)
    If Not Dic.Exists(tmp) Then
        Dic.Add tmp, Darr(i, 5)
    Else
        If Darr(i, 5) > Dic.Item(tmp) Then Dic.Item(tmp) = Darr(i, 5)
    End If
Next i
With Sheets("Sheet1")
    .Range("A2", .Range("B65500").End(xlUp)).ClearContents
    .Range("A2").Resize(Dic.Count, 1) = WorksheetFunction.Transpose(Dic.keys)
    .Range("B2").Resize(Dic.Count, 1) = WorksheetFunction.Transpose(Dic.items)
End With
Set Dic = Nothing
End Sub

Dạ em cảm ơn anh đã giúp đỡ em. Em đã chạy code được rồi anh.. nhưng không biết anh sửa giúp em 1 chút được không ạ? Số là em còn 1 vài dữ liệu đi kèm nằm ở cột B:D và F:Y .. có cách nào lấy chúng đi kèm vs dữ liệu lọc được không ạ. Nôm na giống như mình delete cả 1 row bị trùng.. còn các row khác còn nguyên ạ..
Chân thành cảm ơn anh !

Untitled.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em cảm ơn anh đã giúp đỡ em. Em đã chạy code được rồi anh.. nhưng không biết anh sửa giúp em 1 chút được không ạ? Số là em còn 1 vài dữ liệu đi kèm nằm ở cột B:D và F:Y .. có cách nào lấy chúng đi kèm vs dữ liệu lọc được không ạ. Nôm na giống như mình delete cả 1 row bị trùng.. còn các row khác còn nguyên ạ..
Chân thành cảm ơn anh !
code chỉ lấy giá trị không lấy công thức
Mã:
Public Sub XoaTrung()
Dim Dic As Object, Darr(), Rng As Range, i As Long, tmp As String
Application.ScreenUpdating = False
Sheets("Sheet1").Activate
Darr = Sheets("Data").Range("A1:Y" & Sheets("Data").Range("E65500").End(xlUp).Row).Value
Range("A1:Y" & Range("A65500").End(xlUp).Row).ClearContents
Range("A1").Resize(UBound(Darr), UBound(Darr, 2)) = Darr
Set Dic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(Darr)
    tmp = Darr(i, 1)
    If Not Dic.Exists(tmp) Then
        Dic.Add tmp, Array(Darr(i, 5), i)
    ElseIf Darr(i, 5) >= Dic.Item(tmp)(0) Then
        If Rng Is Nothing Then
            Set Rng = Range("A" & Dic.Item(tmp)(1))
        Else
            Set Rng = Union(Rng, Range("A" & Dic.Item(tmp)(1)))
        End If
        Dic.Item(tmp) = Array(Darr(i, 5), i)
    End If
Next i
Rng.Select
Selection.EntireRow.Delete
Range("A1").Select
Set Dic = Nothing:  Set Rng = Nothing:  Erase Darr
Application.ScreenUpdating = True
End Sub
 
Upvote 0
code chỉ lấy giá trị không lấy công thức
Mã:
Public Sub XoaTrung()
Dim Dic As Object, Darr(), Rng As Range, i As Long, tmp As String
Application.ScreenUpdating = False
Sheets("Sheet1").Activate
Darr = Sheets("Data").Range("A1:Y" & Sheets("Data").Range("E65500").End(xlUp).Row).Value
Range("A1:Y" & Range("A65500").End(xlUp).Row).ClearContents
Range("A1").Resize(UBound(Darr), UBound(Darr, 2)) = Darr
Set Dic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(Darr)
    tmp = Darr(i, 1)
    If Not Dic.Exists(tmp) Then
        Dic.Add tmp, Array(Darr(i, 5), i)
    ElseIf Darr(i, 5) >= Dic.Item(tmp)(0) Then
        If Rng Is Nothing Then
            Set Rng = Range("A" & Dic.Item(tmp)(1))
        Else
            Set Rng = Union(Rng, Range("A" & Dic.Item(tmp)(1)))
        End If
        Dic.Item(tmp) = Array(Darr(i, 5), i)
    End If
Next i
Rng.Select
Selection.EntireRow.Delete
Range("A1").Select
Set Dic = Nothing:  Set Rng = Nothing:  Erase Darr
Application.ScreenUpdating = True
End Sub

Dạ em cảm ơn anh rất nhiều ạ.Không biết em có thể làm phiền anh 1 chút nữa được không ạ.
Dạ nếu em có 1 cột B tên là Item nữa, có 4 loại mã : mã 1,2,3,4 .Bây giờ có cách nào cho nó lọc trùng đối với những số seri có Item là mã 2 và 3 được không ạ.Ví dụ như số seri trùng là 1234 có 4 lần bị trùng, trong đó có 2 số có Item là mã 1, và 2 số còn lại có mã 2 và 3 thì nó chỉ lấy 2 số nằm trong vùng ở mã 2 và 3 để lọc thôi ạ.. còn mã 1 thì kệ nó ạ, không đụng chạm gì đến ạ.Nôm na như khoanh vùng vùng lọc ấy ạ.Vẫn sử dùng y như code ở trên anh nhé.
Phiền anh 1 chút nữa thôi ạ..
Chân thành cảm ơn anh !
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em cảm ơn anh rất nhiều ạ.Không biết em có thể làm phiền anh 1 chút nữa được không ạ.
Dạ nếu em có 1 cột B tên là Item nữa, có 4 loại mã : mã 1,2,3,4 .Bây giờ có cách nào cho nó lọc trùng đối với những số seri có Item là mã 2 và 3 được không ạ.Ví dụ như số seri trùng là 1234 có 4 lần bị trùng, trong đó có 2 số có Item là mã 1, và 2 số còn lại có mã 2 và 3 thì nó chỉ lấy 2 số nằm trong vùng ở mã 2 và 3 để lọc thôi ạ.. còn mã 1 thì kệ nó ạ, không đụng chạm gì đến ạ.Nôm na như khoanh vùng vùng lọc ấy ạ.Vẫn sử dùng y như code ở trên anh nhé.
Phiền anh 1 chút nữa thôi ạ..
Chân thành cảm ơn anh !
như vậy bỏ điều kiện theo thời gian?
giả sử dữ liệu như bảng dưới thì bạn lấy dòng nào?
[TABLE="width: 258"]
[TR]
[TD] [/TD]
[TD]A[/TD]
[TD]B[/TD]
[TD]C[/TD]
[TD]D[/TD]
[TD]E[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]Seri No[/TD]
[TD]Item[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]Time[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]1234[/TD]
[TD]2[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]2[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5678[/TD]
[TD]2[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]5[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]1234[/TD]
[TD]3[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]10[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]11[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]10[/TD]
[/TR]
[TR]
[TD]12[/TD]
[TD]5678[/TD]
[TD]6[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]11[/TD]
[/TR]
[TR]
[TD]13[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD] [/TD]
[TD] [/TD]
[TD]12[/TD]
[/TR]
[/TABLE]
 
Upvote 0
như vậy bỏ điều kiện theo thời gian?
giả sử dữ liệu như bảng dưới thì bạn lấy dòng nào?
[TABLE="width: 258"]
[TR]
[TD][/TD]
[TD]A[/TD]
[TD]B[/TD]
[TD]C[/TD]
[TD]D[/TD]
[TD]E[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]Seri No[/TD]
[TD]Item[/TD]
[TD][/TD]
[TD][/TD]
[TD]Time[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]1234[/TD]
[TD]2[/TD]
[TD][/TD]
[TD][/TD]
[TD]2[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5678[/TD]
[TD]2[/TD]
[TD][/TD]
[TD][/TD]
[TD]5[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]1234[/TD]
[TD]3[/TD]
[TD][/TD]
[TD][/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]10[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]11[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]10[/TD]
[/TR]
[TR]
[TD]12[/TD]
[TD]5678[/TD]
[TD]6[/TD]
[TD][/TD]
[TD][/TD]
[TD]11[/TD]
[/TR]
[TR]
[TD]13[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]12[/TD]
[/TR]
[/TABLE]

[TABLE="width: 258"]
[TR]
[TD][/TD]
[TD]A[/TD]
[TD]B[/TD]
[TD]C[/TD]
[TD]D[/TD]
[TD]E[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]Seri No[/TD]
[TD]Item[/TD]
[TD][/TD]
[TD][/TD]
[TD]Time[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5678[/TD]
[TD]2[/TD]
[TD][/TD]
[TD][/TD]
[TD]5[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]1234[/TD]
[TD]3[/TD]
[TD][/TD]
[TD][/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]10[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]11[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]10[/TD]
[/TR]
[TR]
[TD]12[/TD]
[TD]5678[/TD]
[TD]6[/TD]
[TD][/TD]
[TD][/TD]
[TD]11[/TD]
[/TR]
[TR]
[TD]13[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]12

[/TD]
[/TR]
[/TABLE]

Dạ kết quả đây ạ .. những số seri có Item là 1 ,4 thì để nguyên ạ, dù nó có mã 1234 trùng đi nữa.Xét vùng item 2 và 3. có mã 1234 trùng 2 lần, xét cột Time thấy rằng row 7 có giá trị lớn hơn nên để lại.. còn row 3 có Time nhỏ hơn thì delete.
Cảm ơn anh ạ !
 
Upvote 0
[TABLE="width: 258"]
[TR]
[TD][/TD]
[TD]A[/TD]
[TD]B[/TD]
[TD]C[/TD]
[TD]D[/TD]
[TD]E[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]Seri No[/TD]
[TD]Item[/TD]
[TD][/TD]
[TD][/TD]
[TD]Time[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]1234[/TD]
[TD]1[/TD]
[TD][/TD]
[TD][/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5678[/TD]
[TD]2[/TD]
[TD][/TD]
[TD][/TD]
[TD]5[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]1234[/TD]
[TD]3[/TD]
[TD][/TD]
[TD][/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]5678[/TD]
[TD]4[/TD]
[TD][/TD]
[TD][/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]10[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]11[/TD]
[TD]5678[/TD]
[TD]5[/TD]
[TD][/TD]
[TD][/TD]
[TD]10[/TD]
[/TR]
[TR]
[TD]12[/TD]
[TD]5678[/TD]
[TD]6[/TD]
[TD][/TD]
[TD][/TD]
[TD]11[/TD]
[/TR]
[TR]
[TD]13[/TD]
[TD]2389[/TD]
[TD]7[/TD]
[TD][/TD]
[TD][/TD]
[TD]12
[/TD]
[/TR]
[/TABLE]

Dạ kết quả đây ạ .. những số seri có Item là 1 ,4 thì để nguyên ạ, dù nó có mã 1234 trùng đi nữa.Xét vùng item 2 và 3. có mã 1234 trùng 2 lần, xét cột Time thấy rằng row 7 có giá trị lớn hơn nên để lại.. còn row 3 có Time nhỏ hơn thì delete.
Cảm ơn anh ạ !
còn số seri là 5678 và 2389 bỏ cái nào?
 
Upvote 0
còn số seri là 5678 và 2389 bỏ cái nào?
Dạ vì em đang ví dụ lọc trùng những seri nằm trong vùng có item là 2 và 3 nên
số seri 5678 chỉ có 1 item là 2 nên không lọc nó ạ, dù nó có trùng với item 4,5,6 ạ.còn 2389 thì nó nằm ở phân vùng có item 7 nên mình không quan tâm ạ.
Chỗ này em thấy rất khó, em cũng có thử làm nhưng nó báo lỗi. do số seri 5678 nằm ở 2 phân vùng khác nhau.
 
Upvote 0
Dạ vì em đang ví dụ lọc trùng những seri nằm trong vùng có item là 2 và 3 nên
số seri 5678 chỉ có 1 item là 2 nên không lọc nó ạ, dù nó có trùng với item 4,5,6 ạ.còn 2389 thì nó nằm ở phân vùng có item 7 nên mình không quan tâm ạ.
Chỗ này em thấy rất khó, em cũng có thử làm nhưng nó báo lỗi. do số seri 5678 nằm ở 2 phân vùng khác nhau.
mình không hiểu lắm, bạn đưa dữ liệu thật lên mình mới hình dung được yêu cầu xử lý, nếu cần thì gởi mail cho mình
 
Upvote 0
mình không hiểu lắm, bạn đưa dữ liệu thật lên mình mới hình dung được yêu cầu xử lý, nếu cần thì gởi mail cho mình
d
Dạ dữ liệu thật nó nhiều lắm ạ.. đến cả trăm ngàn dữ liệu.. đây là 1 bài toán nhỏ trong đó ạ.. bài toán này em tự mô phỏng đơn giản hơn.
Em có up file mô phỏng nhưng em up ko được.. nó cứ báo chờ.. kể cả insert hình ảnh
Bây giờ em nói đơn giản nhất có thể nhé : đầu tiên nó sẽ tìm tất cả các dữ liệu (bao gồm số seri và time) nào có item là 2 và 3..Tiến hành lọc trùng trong mảng vừa tìm được ( bao gồm cả việc lọc time có giá trị lớn hơn giữa các seri bị trùng- y như bài toán ban đầu anh đã giúp em). Tất cả dữ liệu còn lại mình cứ để nguyên và không quan tâm ạ..Kể cả có 1 số seri nào đó nằm ở Item 1,3,4,5,6..... trùng trong item 2 & 3 thì mình cũng không có lọc . Nôm na là khoanh vùng vùng cần lọc thôi ạ, gói gọn nó xử lý trong vùng item 2 và 3 thôi !
Tiện thể cho em xin mail của anh ạ.. em sẽ gởi file mô phỏng ạ
Cảm ơn anh nhiều ạ !
 
Upvote 0
d
Dạ dữ liệu thật nó nhiều lắm ạ.. đến cả trăm ngàn dữ liệu.. đây là 1 bài toán nhỏ trong đó ạ.. bài toán này em tự mô phỏng đơn giản hơn.
Em có up file mô phỏng nhưng em up ko được.. nó cứ báo chờ.. kể cả insert hình ảnh
Bây giờ em nói đơn giản nhất có thể nhé : đầu tiên nó sẽ tìm tất cả các dữ liệu (bao gồm số seri và time) nào có item là 2 và 3..Tiến hành lọc trùng trong mảng vừa tìm được ( bao gồm cả việc lọc time có giá trị lớn hơn giữa các seri bị trùng- y như bài toán ban đầu anh đã giúp em). Tất cả dữ liệu còn lại mình cứ để nguyên và không quan tâm ạ..Kể cả có 1 số seri nào đó nằm ở Item 1,3,4,5,6..... trùng trong item 2 & 3 thì mình cũng không có lọc . Nôm na là khoanh vùng vùng cần lọc thôi ạ, gói gọn nó xử lý trong vùng item 2 và 3 thôi !
Tiện thể cho em xin mail của anh ạ.. em sẽ gởi file mô phỏng ạ
Cảm ơn anh nhiều ạ !
bạn bấm Ctrl+Home sẽ nhảy lên đầu màn hình, nhìn ô Lưu Ý có gì lạ thì bấm vào
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dạ anh.. em gởi anh xem file mô phỏng .... do chorme có vấn đề nên ko up được ngay từ đầu.
bạn dùng code mới thử xem có đúng ý không
Mã:
Public Sub XoaTrung()
Dim Dic As Object, Darr(), Rng As Range, i As Long, tmp As String
Application.ScreenUpdating = False
Sheets("Sheet1").Activate
Darr = Sheets("Data").Range("A1:Y" & Sheets("Data").Range("E65500").End(xlUp).Row).Value
Range("A1:Y" & Range("A65500").End(xlUp).Row).ClearContents
Range("A1").Resize(UBound(Darr), UBound(Darr, 2)) = Darr
Set Dic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(Darr)
    [COLOR=#ff0000]If Right(Darr(i, 3), 1) = "2" Or Right(Darr(i, 3), 1) = "3" Then[/COLOR]
        tmp = Darr(i, 1)
        If Not Dic.Exists(tmp) Then
            Dic.Add tmp, Array(Darr(i, 5), i)
        ElseIf Darr(i, 5) >= Dic.Item(tmp)(0) Then
            If Rng Is Nothing Then
                Set Rng = Range("A" & Dic.Item(tmp)(1))
            Else
                Set Rng = Union(Rng, Range("A" & Dic.Item(tmp)(1)))
            End If
            Dic.Item(tmp) = Array(Darr(i, 5), i)
        End If
    [COLOR=#ff0000]End If[/COLOR]
Next i
Rng.Select
Selection.EntireRow.Delete
Range("A1").Select
Set Dic = Nothing:  Set Rng = Nothing:  Erase Darr
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
d
....
Bây giờ em nói đơn giản nhất có thể nhé : đầu tiên nó sẽ tìm tất cả các dữ liệu (bao gồm số seri và time) nào có item là 2 và 3..Tiến hành lọc trùng trong mảng vừa tìm được ( bao gồm cả việc lọc time có giá trị lớn hơn giữa các seri bị trùng- y như bài toán ban đầu anh đã giúp em). Tất cả dữ liệu còn lại mình cứ để nguyên và không quan tâm ạ..Kể cả có 1 số seri nào đó nằm ở Item 1,3,4,5,6..... trùng trong item 2 & 3 thì mình cũng không có lọc . Nôm na là khoanh vùng vùng cần lọc thôi ạ, gói gọn nó xử lý trong vùng item 2 và 3 thôi !
....
!
Đề bài này chưa rõ ràng chỗ:
1) Thằng 261070ZM0F77LD3 xuất hiện ở "Mã 3" ...3 lần & 'mã 2" ...2 lần ==> "xử" nó làm sao ?
2) Thằng 26105Z440F77LDL xuất hiện ở "Mã 3" ...1 lần & "mã 2" ...1 lần ==> "xử" nó làm sao ?
Híc +-+-+-++-+-+-++-+-+-+
Thân
 
Upvote 0
Web KT

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

Back
Top Bottom