Lọc và loại bỏ dữ liệu trùng nhưng giữ lại dữ liệu thỏa điều kiện nào đó

Liên hệ QC

nmhanh

Thành viên chính thức
Tham gia
5/7/07
Bài viết
82
Được thích
8
Chào các Anh/Chị trên diễn đàn.

Nhờ Anh/Chị trên diễn đàn hỗ trợ hướng dẫn tôi cách lọc và loại bỏ dữ liệu trùng chỉ giữ lại dữ liệu thỏa điều kiện.

Đính kèm theo là file mẫu mà tôi đang muốn thực hiện.

Rất mong sớm nhận được hỗ trợ.

Cảm ơn Anh/Chị nhiều.
 

File đính kèm

  • Book1.xlsx
    11.9 KB · Đọc: 23
Chào các Anh/Chị trên diễn đàn.

Nhờ Anh/Chị trên diễn đàn hỗ trợ hướng dẫn tôi cách lọc và loại bỏ dữ liệu trùng chỉ giữ lại dữ liệu thỏa điều kiện.

Đính kèm theo là file mẫu mà tôi đang muốn thực hiện.

Rất mong sớm nhận được hỗ trợ.

Cảm ơn Anh/Chị nhiều.
Dùng cột phụ có được hay không
 
Chào các Anh/Chị trên diễn đàn.

Nhờ Anh/Chị trên diễn đàn hỗ trợ hướng dẫn tôi cách lọc và loại bỏ dữ liệu trùng chỉ giữ lại dữ liệu thỏa điều kiện.

Đính kèm theo là file mẫu mà tôi đang muốn thực hiện.

Rất mong sớm nhận được hỗ trợ.

Cảm ơn Anh/Chị nhiều.
Nếu dữ liệu nhiều dòng, thì thử dùng code VBA này xem sao.
Mã:
Sub Loc()
Dim I&, J&, R&, C&, k&, t&, Lr
Dim Arr(), KQ(), DK
Dim dic As Object
With Sheet1
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:D" & Lr).Value
R = UBound(Arr, 1): C = UBound(Arr, 2)
ReDim KQ(1 To R, 1 To C)
Set dic = CreateObject("Scripting.Dictionary")
For I = 1 To R
    DK = Arr(I, 1) & "|" & Arr(I, 2) & "|" & Arr(I, 3)
        If Not dic.exists(DK) Then
            t = t + 1
            dic.Add (DK), t
            For J = 1 To C
                KQ(t, J) = Arr(I, J)
            Next J
        Else
            k = dic.Item(DK)
            If Arr(I, 4) > KQ(k, 4) Then KQ(k, 4) = Arr(I, 4)
        End If
Next I
If t Then
    .[K2].Resize(t, C) = KQ
    .[K2].Resize(t, C).Borders.LineStyle = 1
End If
End With
Set dic = Nothing
End Sub
Hi vọng đúng ý.
 

File đính kèm

  • LOC Dung Dic.xlsm
    21.1 KB · Đọc: 12
Nếu dữ liệu nhiều dòng, thì thử dùng code VBA này xem sao.
Mã:
Sub Loc()
Dim I&, J&, R&, C&, k&, t&, Lr
Dim Arr(), KQ(), DK
Dim dic As Object
With Sheet1
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:D" & Lr).Value
R = UBound(Arr, 1): C = UBound(Arr, 2)
ReDim KQ(1 To R, 1 To C)
Set dic = CreateObject("Scripting.Dictionary")
For I = 1 To R
    DK = Arr(I, 1) & "|" & Arr(I, 2) & "|" & Arr(I, 3)
        If Not dic.exists(DK) Then
            t = t + 1
            dic.Add (DK), t
            For J = 1 To C
                KQ(t, J) = Arr(I, J)
            Next J
        Else
            k = dic.Item(DK)
            If Arr(I, 4) > KQ(k, 4) Then KQ(k, 4) = Arr(I, 4)
        End If
Next I
If t Then
    .[K2].Resize(t, C) = KQ
    .[K2].Resize(t, C).Borders.LineStyle = 1
End If
End With
Set dic = Nothing
End Sub
Hi vọng đúng ý.
Bài này key chỉ cần tên là ổn (dữ liệu chuẩn chắc phải có Mã HS).

Nếu chủ thớt dùng Office 2016 trở lên, dùng Power Query (tool có sẵn của Excel) sẽ rất nhanh, không cần đến VBA. Nếu bạn cần tôi sẽ quay lại cách làm.
Kết quả code của anh @HUONGHCKT tôi để ở F2, Kết quả dùng Power Query để ở K2.
 

File đính kèm

  • nmhanh.xlsm
    27.8 KB · Đọc: 13
Lần chỉnh sửa cuối:
Bài này key chỉ cần tên là ổn (dữ liệu chuẩn chắc phải có Mã HS).

Nếu chủ thớt dùng Office 2016 trở lên, dùng Power Query (tool có sẵn của Excel) sẽ rất nhanh, không cần đến VBA. Nếu bạn cần tôi sẽ quay lại cách làm.
Kết quả code của anh @HUONGHCKT tôi để ở F2, Kết quả dùng Power Query để ở K2.
Dạ vâng, nhờ bạn giúp gửi lên đây video quay lại cách làm bằng Power Query của Office 2016. Cảm ơn nhiều ạ.
 
Chào các Anh/Chị trên diễn đàn.

Nhờ Anh/Chị trên diễn đàn hỗ trợ hướng dẫn tôi cách lọc và loại bỏ dữ liệu trùng chỉ giữ lại dữ liệu thỏa điều kiện.
Dùng lọc nâng cao, công thức là:

=D3=AGGREGATE(14,6,$D$3:$D$9/($A$3:$A$9=A3)/($B$3:$B$9=B3)/($C$3:$C$9=C3),1)

Chọn Unique records only.

.
 
Dạ vâng, nhờ bạn giúp gửi lên đây video quay lại cách làm bằng Power Query của Office 2016. Cảm ơn nhiều ạ.
Tôi gửi Video, bạn tham khảo. Việc dùng Power Query thuận lợi và nhanh chóng, ví dụ bạn cần thống kê thêm điểm thấp nhất, số lần thi, điểm trung bình các lần thi.... bạn thử xem sao nhé.
 
Chào các Anh/Chị trên diễn đàn.

Nhờ Anh/Chị trên diễn đàn hỗ trợ hướng dẫn tôi cách lọc và loại bỏ dữ liệu trùng chỉ giữ lại dữ liệu thỏa điều kiện.

Đính kèm theo là file mẫu mà tôi đang muốn thực hiện.

Rất mong sớm nhận được hỗ trợ.

Cảm ơn Anh/Chị nhiều.
Thêm cách cho bạn tham khảo nhé:

Mã:
Sub Gop_HLMT()
    With CreateObject("ADODB.Recordset")
        .Open "SELECT F1,F2,F3,Max(F4) FROM [Sheet1$A3:D] Group By F1,F2,F3", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No"""
        Sheet1.Range("P3").CopyFromRecordset .DataSource
    End With
End Sub
 
Web KT
Back
Top Bottom