Các câu hỏi về lọc ra danh sách duy nhất (loại bỏ dữ liệu trùng)

Liên hệ QC
- Thứ nhất: Chỉ 1 vòng lập là được rồi
- Thứ hai: Nguyên tắc xử lý dữ liệu là nên cố gắng thu gom cùng 1 loại dữ liệu, tức chỉ nên Add ngày tháng vào Dictionary, đừng nên lẫn lộn chuổi (tiêu đề) ---> Sẽ khiến cho ta khó khăn trong việc xử lý ---> Tiêu đề có thể đặt ở phần cuối code cũng đâu có vấn đề gì
Sáng làm gấp quá không để ý 1 vòng lặp là được rồi, vì em thấy dữ liệu đơn giản nên làm cho đơn giản nên không có phân ra. Nếu dùng 1 vòng lặp em làm cách này không biết có cách nào hay hơn vì dữ liệu nằm ở các sheet không dùng cột

[GPECODE=vb]
Sub DicOnly1()
Dim Dic As Object, shArr, sh, srange, i As Long
Set Dic = CreateObject("Scripting.Dictionary")
shArr = Array("Sheet1", "Sheet2")
For Each sh In shArr
If sh = "Sheet1" Then
srange = Sheets(sh).Range("A4:A" & Sheets(sh).Range("A14").End(xlDown).Row).Value
Else
srange = Sheets(sh).Range("C9:C" & Sheets(sh).Range("C9").End(xlDown).Row).Value
End If

For i = 1 To UBound(srange)
If Not Dic.Exists(srange(i, 1)) Then
Dic.Add srange(i, 1), ""
End If
Next i

Next
If Dic.Count Then Sheets("sheet4").Range("A1").Resize(Dic.Count, 1).Value = Application.Transpose(Dic.Keys)


End Sub


[/GPECODE]

Nếu dữ liệu ở nhiều sheet mà nằm rời rạc vậy mình có cách nào gom vào mảng nguồn để xử lý trong Dic không anh
 
Nếu dữ liệu ở nhiều sheet mà nằm rời rạc vậy mình có cách nào gom vào mảng nguồn để xử lý trong Dic không anh

Nếu chẳng có quy luật gì thì cũng đành làm từng phần thế thôi
Lưu ý như tôi đã nói ở trên: Không lên gom tiêu đề vào trong Dic nhé (lẫn lộn với dữ liệu dạng Date) ---> Nói chung là không nên làm thế
 
Các bạn giúp mình sort lại dữ liệu trước hoặc sau khi gán ra sheet luôn với.
Thầy NDU "Lưu ý như tôi đã nói ở trên: Không lên gom tiêu đề vào trong Dic nhé (lẫn lộn với dữ liệu dạng Date) ---> Nói chung là không nên làm thế"
Em đọc đi đọc lại mà không hiểu, Thầy có thể sửa lại code trên của bạn nmhung49 như thế nào cho hợp lý cho em với.
 
Bạn có thể nói rõ hơn không. Mình chưa hiểu "Ở cột B bạn chọn lọc non blank là ra danh sách giá trị duy nhất của cột A như bạn muốn"
 
Mình có nhiều sheet chứa dữ liệu của khách hàng và có số chứng minh thư của từng người, mình muốn tìm ra các khách hàng trùng nhau (có thể ở cùng 1 sheet hoặc ở khác sheet) thì làm như nào?
 
Mình có dữ liệu nhập hàng mỗi ngày, cuối tháng mình muốn cộng tổng từng loại hàng mua, nếu mặt hàng có có 2 đơn giá thì sẽ thành 2 dòng, các bạn xem file đính kèm giúp mình với nhé.
View attachment Book1.xlsx
 
Bạn chọn cả cột có dữ liệu trùng.
Nếu bạn dùng Excel 2007. Bạn vào Data => Remove Duplicate: Nó sẽ bỏ ra những dữ liệu trùng cho bạn.
 
Mình có dữ liệu nhập hàng mỗi ngày, cuối tháng mình muốn cộng tổng từng loại hàng mua, nếu mặt hàng có có 2 đơn giá thì sẽ thành 2 dòng, các bạn xem file đính kèm giúp mình với nhé.
View attachment 121984
Viết tặng 1 Sub cho file này, chỉ dùng trong 1 tháng:
[GPECODE=vb]Public Sub ThongKe()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([C4], [C4].End(xlDown)).Resize(, 4).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1) & sArr(I, 3)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
For J = 1 To 4
dArr(K, J) = sArr(I, J)
Next J
Else
dArr(Dic.Item(Tem), 2) = dArr(Dic.Item(Tem), 2) + sArr(I, 2)
dArr(Dic.Item(Tem), 4) = dArr(Dic.Item(Tem), 4) + sArr(I, 4)
End If
Next I
[H8].Resize(K, 4) = dArr
[H8].Resize(K, 4).Sort Key1:=[H8], Key2:=[J8]
Set Dic = Nothing
End Sub[/GPECODE]
 

File đính kèm

  • GPExx.rar
    20 KB · Đọc: 63
Lần chỉnh sửa cuối:
Hi all!
Nhờ các bác chỉ giúp công thức lọc, liệt kê những nhân viên tùy chọn theo thời gian với.
Lọc ra và liệt kê những giá trị B, C, D ở sheet Report.
 

File đính kèm

  • LietKeDuLieu theo thoi gian.xlsx
    10.6 KB · Đọc: 13
các cao thủ giúp em với !thanks cả nhà. mật khẩu la 1 ạ.
 

File đính kèm

  • Copy of Bảng lọc.xls.xlsm
    61.2 KB · Đọc: 8
Lần chỉnh sửa cuối:
Các anh các chị giúp em với. Công việc hiện tại của em là nhập danh sách ô tô bảo hiểm, mỗi tháng em cho vào một Sheet riêng biệt, cuối tháng em phải kiểm tra xem có nhập trùng xe nào không.
Số liệu khá đơn giản, chỉ gồm biển số xe VD: 88A-06888, 30H-2500
Cho em hỏi có cách nào để nhập vào là em biết xe ấy em đã nhập rồi không, nếu tô màu được thì càng tốt ạ (mỗi tháng em phải nhập hàng trăm xe và dò mất cả ngày ạ). Mong anh chị giúp đỡ
 
Các anh các chị giúp em với. Công việc hiện tại của em là nhập danh sách ô tô bảo hiểm, mỗi tháng em cho vào một Sheet riêng biệt, cuối tháng em phải kiểm tra xem có nhập trùng xe nào không.
Số liệu khá đơn giản, chỉ gồm biển số xe VD: 88A-06888, 30H-2500
Cho em hỏi có cách nào để nhập vào là em biết xe ấy em đã nhập rồi không, nếu tô màu được thì càng tốt ạ (mỗi tháng em phải nhập hàng trăm xe và dò mất cả ngày ạ). Mong anh chị giúp đỡ

Bạn thử File này coi đúng ý không nha
 

File đính kèm

  • trùng.xlsx
    9.2 KB · Đọc: 33
Em chi muốn tạo danh sách không trùng nhau o cột A sheet1 thì sửa lại như nào vậy anh, của anh la lọc ra cả một bảng dữ liệu
 
Sao không dùng Advanced Filter cho gọn nhỉ?
PHP:
Sub LocTrung()
  Dim Rng As Range
  [A1].CurrentRegion.Clear
  Set Rng = Sheet1.[A1].CurrentRegion
  Rng.AdvancedFilter Action:=2, CopyToRange:=[A1], Unique:=True
End Sub


Em chi muốn tạo danh sách không trùng nhau o cột A sheet1 thì sửa lại như nào vậy anh, của anh la lọc ra cả một bảng dữ liệu
 
Dear all.

Mình có 3 kho hàng, hàng ngày xuất cho nhiều khách, mỗi khách 1 vài mã hàng.
Mình muốn kiểm tra xem 1 kho 1 ngày xuất ra bao nhiêu mã hàng hóa, và số lượng bao nhiêu thì thiết lập như thế nào các bạn nhỉ? Nhờ mọi người giúp mình nhé.
Cảm ơn :)
 

File đính kèm

  • Dem co dieu kien khong tinh du lieu trung.xlsx
    13 KB · Đọc: 7
Chào cả nhà !

Em có 1 vấn đề, rất mong được sự giúp đỡ của mọi người ah. Cám ơn !

Em nhập dữ liệu từ sheet PS
- Sheet XNT em lọc ra dữ liệu duy nhất và ẩn dòng trống từ sheet PS gồm có 4 trường:
+ Mã kiện
+ Mã hàng
+ Tên hàng
+ ĐVT
- Sheet CN em lọc ra duy nhất và ẩn dòng trống từ sheet PS gồm có 2 trường:
+ Mã khách hàng
+ Tên khách hàng

VD: Dữ liệu lọc từ dòng số 6 -> 500, có thể thực tế lọc ra chỉ được có 400 dòng thì 100 kia sẽ ẩn đi.
Vì bên dưới em chèn thêm mấy dòng dữ liệu, ngày tháng, người lập...
 
Chào cả nhà !

Em có 1 vấn đề, rất mong được sự giúp đỡ của mọi người ah. Cám ơn !

Em nhập dữ liệu từ sheet PS
- Sheet XNT em lọc ra dữ liệu duy nhất và ẩn dòng trống từ sheet PS gồm có 4 trường:
+ Mã kiện
+ Mã hàng
+ Tên hàng
+ ĐVT
- Sheet CN em lọc ra duy nhất và ẩn dòng trống từ sheet PS gồm có 2 trường:
+ Mã khách hàng
+ Tên khách hàng

VD: Dữ liệu lọc từ dòng số 6 -> 500, có thể thực tế lọc ra chỉ được có 400 dòng thì 100 kia sẽ ẩn đi.
Vì bên dưới em chèn thêm mấy dòng dữ liệu, ngày tháng, người lập...
chạy code
Mã:
Sub XNT()
  Dim i As Long, k As Long, key As String
  Dim Arr As Variant, dArr As Variant
  With Sheets("PS")
    dArr = .Range("E3", .Range("H" & Rows.Count).End(xlUp)).Value
  End With
  ReDim Arr(1 To UBound(dArr, 1), 1 To 4)
  With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(dArr, 1)
      key = dArr(i, 1) & "#" & dArr(i, 2)
      If Not .Exists(key) Then
        .Add key, ""
        k = k + 1
        Arr(k, 1) = dArr(i, 1): Arr(k, 2) = dArr(i, 2)
        Arr(k, 3) = dArr(i, 3): Arr(k, 4) = dArr(i, 4)
      End If
    Next i
  End With
  With Sheets("XNT")
    .Range("A7:D1007").EntireRow.Hidden = False
    .Range("A7:D1007").ClearContents
    If k Then .Range("A7:D7").Resize(k) = Arr
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 7 Then i = 7
    .Range("A" & i + 1, "A1007").EntireRow.Hidden = True
  End With
End Sub

Sub CN()
  Dim i As Long, k As Long, key As String
  Dim Arr, dArr
  With Sheets("PS")
    dArr = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Value
  End With
  ReDim Arr(1 To UBound(dArr, 1), 1 To 2)
  With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(dArr, 1)
      key = dArr(i, 1)
      If Not .Exists(key) Then
        .Add key, ""
        k = k + 1
        Arr(k, 1) = dArr(i, 1): Arr(k, 2) = dArr(i, 2)
      End If
    Next i
  End With
  With Sheets("CN")
    .Range("A8:B47").EntireRow.Hidden = False
    .Range("A8:B47").ClearContents
    If k Then .Range("A8:B8").Resize(k) = Arr
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 8 Then i = 8
    .Range("A" & i + 1, "A47").EntireRow.Hidden = True
  End With
End Sub
 
Web KT
Back
Top Bottom