Nhờ giúp đỡ lọc dữ liệu trùng lặp có điều kiện

Liên hệ QC

nguyenmtuan

Thành viên chính thức
Tham gia
17/6/16
Bài viết
78
Được thích
4
Mình có file excel gửi kèm, trong đó nhờ mọi người chỉ cho cách lọc dữ liệu trùng lặp ở cột B chỉ lấy 1 giá trị duy nhất với điều kiện là ngày ở cột D tương ứng là ngày cũ nhất.
Rất mong được mọi người hỗ trợ.
Cám ơn mọi người.
 

File đính kèm

  • Kadex 3022.xlsx
    136.9 KB · Đọc: 26
Mình có file excel gửi kèm, trong đó nhờ mọi người chỉ cho cách lọc dữ liệu trùng lặp ở cột B chỉ lấy 1 giá trị duy nhất với điều kiện là ngày ở cột D tương ứng là ngày cũ nhất.
Rất mong được mọi người hỗ trợ.
Cám ơn mọi người.
Những dòng không có ngày bỏ qua, hay lấy và xét điều kiện như thế nào
 
Có khi nào cứ sort cột Ngày theo từ cũ tới mới. Xong nạp vào Dic những giá trị lần đầu nó xuất hiện được không thầy nhỉ?
Cái này cần gì sort cứ nạp vào dic rồi kiểm tra với giá trị cũ vấn đề ở đây là có dòng có dữ liệu dòng không mà nó trùng nhau.Nên không biết lấy thế nào.Cái này phải do yêu cầu của tác giả mới viết code chuẩn được.
 
Như vậy thì sẽ lấy dùng giá trị có ngày ạ.
Với dữ liệu đã sort theo cột B, chạy sub ABC ..
Mã:
Sub ABC()
  Dim sArr(), res(), tmp$, ngay, sRow&, i&, r&, k&, j&
 
  With Sheets("Kadex")
    sArr = .Range("A2:D" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  sRow = UBound(sArr) - 1
  ReDim res(1 To sRow, 1 To 4)
  For i = 1 To sRow
    If tmp <> sArr(i, 2) Then
      k = k + 1
      r = i
      tmp = sArr(i, 2)
      ngay = sArr(i, 4)
    ElseIf sArr(i, 4) <> Empty Then
      If ngay = Empty Or ngay > sArr(i, 4) Then
        r = i
        ngay = sArr(i, 4)
      End If
    End If
    If tmp <> sArr(i + 1, 2) Then
      For j = 1 To 4
        res(k, j) = sArr(r, j)
      Next j
    End If
  Next i
  Sheets("Kadex").Range("F2").Resize(k).NumberFormat = "@"
  Sheets("Kadex").Range("F2").Resize(k, 4) = res
End Sub
 
Lần chỉnh sửa cuối:
Với dữ liệu đã sort theo cột B, chạy sub ABC ..
Mã:
Sub ABC()
  Dim sArr(), res(), tmp$, ngay, sRow&, i&, r&, k&, j&
 
  With Sheets("Kadex")
    sArr = .Range("A2:D" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  sRow = UBound(sArr) - 1
  ReDim res(1 To sRow, 1 To 4)
  For i = 1 To sRow
    If tmp <> sArr(i, 2) Then
      k = k + 1
      r = i
      tmp = sArr(i, 2)
      ngay = sArr(i, 4)
    ElseIf sArr(i, 4) <> Empty Then
      If ngay = Empty Or ngay > sArr(i, 4) Then
        r = i
        ngay = sArr(i, 4)
      End If
    End If
    If tmp <> sArr(i + 1, 2) Then
      For j = 1 To 4
        res(k, j) = sArr(r, j)
      Next j
    End If
  Next i
  Range("F2").Resize(k).NumberFormat = "@"
  Sheets("Kadex").Range("F2").Resize(k, 4) = res
End Sub
Quá tuyệt vời, cám ơn bác nhiều ạ, chúc bác nhiều sức khoẻ.
 
Web KT
Back
Top Bottom