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
Nếu dữ liệu chỉ có vài chục dòng thì xem file này, thêm 1 cột phụ rồi dùng công thức + Name
Nếu dữ liệu nhiều hơn thì nên dùng VBA cho "tốc độ".
Dữ liệu của em không nhiều, nhưng Khối cell O6:Q16 của em là kết qủa của các công thức, nên khi áp dụng các công thức của anh thì tại các cell của cột K, L, M em phải chọn cell rồi bấm F2 thì công thức mới cập nhật (bấm F9 nó không "xi nhê")
Anh giúp em viết code , tại Cell L5, em có dùng Validation để chọn để ra kết qủa của Khối cell O6:Q16
Em cảm ơn tất cả các anh chị!
 
Dữ liệu của em không nhiều, nhưng Khối cell O6:Q16 của em là kết qủa của các công thức, nên khi áp dụng các công thức của anh thì tại các cell của cột K, L, M em phải chọn cell rồi bấm F2 thì công thức mới cập nhật (bấm F9 nó không "xi nhê")
Anh giúp em viết code , tại Cell L5, em có dùng Validation để chọn để ra kết qủa của Khối cell O6:Q16
Em cảm ơn tất cả các anh chị!

Thế thì bạn dùng Advanced Filter\Unique đi ---> 1 phát ra ngay thôi mà (record macro để biết code viết thế nào)
Với Excel 2007 cũng có thể dùng Remove Duplicate
 
Thế thì bạn dùng Advanced Filter\Unique đi ---> 1 phát ra ngay thôi mà (record macro để biết code viết thế nào)
Với Excel 2007 cũng có thể dùng Remove Duplicate
Tôi đã record Macro, nhưng không xử lý được hai dòng vẫn trùng nhau
Nhờ bạn giúp đỡ. Xin cảm ơn
 

File đính kèm

  • LocDuyNhat_Record.xls
    23 KB · Đọc: 16
Lần chỉnh sửa cuối:
Hi, ở đây mình không sử dụng dòng tiêu đề! nên không biết có cách nào không?
Một là bạn tự gõ tiêu đề vào nếu dùng Advanced Filter (tại quy định nó vậy). Hai là bạn dùng Remove Duplicate
Mã:
Sub Macro1()
  With Range("K6:M10000")
    .Value = Range("O6:Q10000").Value
    .RemoveDuplicates Array(1, 2, 3), xlNo
  End With
End Sub
 
Một là bạn tự gõ tiêu đề vào nếu dùng Advanced Filter (tại quy định nó vậy). Hai là bạn dùng Remove Duplicate
Mã:
Sub Macro1()
  With Range("K6:M10000")
    .Value = Range("O6:Q10000").Value
    .RemoveDuplicates Array(1, 2, 3), xlNo
  End With
End Sub
Sau khi chạy Code trên thì:
1/ Nó báo lỗi "Object doesn't Support thí property or method" tại ".RemoveDuplicates Array(1, 2, 3), xlNo"
2/ Và nó lấy toàn bộ của cột O, P, Q qua K, L, M
Cảm ơn bạn!
 
Sau khi chạy Code trên thì:
1/ Nó báo lỗi "Object doesn't Support thí property or method" tại ".RemoveDuplicates Array(1, 2, 3), xlNo"
2/ Và nó lấy toàn bộ của cột O, P, Q qua K, L, M
Cảm ơn bạn!

Đã nói đến Remove Duplicate thì bạn phải biết rằng nó chỉ hoạt động trên Excel 2007 trở lên
Bạn dùng Excel 2003 chăng?
 
Tôi đang sử dụng Ex 2003!!!

Tui cũng xài 2003 nè. Xem thử code này có chạy được không:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dic As Object, Sar(), dAr(1 To 11, 1 To 3), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
If Target.Address = "$L$5" Then
    Sar = [O6:Q16].Value
    For I = 1 To 11
        Tem = Sar(I, 1) & "#" & Sar(I, 2) & "#" & Sar(I, 3)
        If Not Dic.Exists(Tem) Then
            K = K + 1: Dic.Add Tem, ""
            For J = 1 To 3
                dAr(K, J) = Sar(I, J)
            Next J
        End If
    Next I
    [K6:M16].ClearContents
    If K Then [K6].Resize(K, 3).Value = dAr
End If
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Tui cũng xài 2003 nè. Xem thử code này có chạy được không:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dic As Object, Sar(), dAr(1 To 11, 1 To 3), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
If Target.Address = "$L$5" Then
    Sar = [O6:Q16].Value
    For I = 1 To 11
        Tem = Sar(I, 1) & "#" & Sar(I, 2) & "#" & Sar(I, 3)
        If Not Dic.Exists(Tem) Then
            K = K + 1: Dic.Add Tem, ""
            For J = 1 To 3
                dAr(K, J) = Sar(I, J)
            Next J
        End If
    Next I
    [K6:M16].ClearContents
    If K Then [K6].Resize(K, 3).Value = dAr
End If
Set Dic = Nothing
End Sub
Dạ code của anh chạy rất tốt ạ!
Anh vui lòng giúp em thêm 1 bài nữa là vừa lọc duy nhất và cộng dồng số tiền nếu cùng MÃ
Và cũng sử dụng sự kiện Sub Worksheet_Change
Em có giải thích trong File
Em cảm ơn!
 

File đính kèm

  • LocCongDon.xls
    24 KB · Đọc: 48
Dạ code của anh chạy rất tốt ạ!
Anh vui lòng giúp em thêm 1 bài nữa là vừa lọc duy nhất và cộng dồng số tiền nếu cùng MÃ
Và cũng sử dụng sự kiện Sub Worksheet_Change
Em có giải thích trong File
Em cảm ơn!
Yêu cầu công dồn này quá dễ:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$L$5" Then
    With Range("L6:M1000")
     .ClearContents
     .Cells(1, 1).Consolidate Range("O6:P1000").Address(, , 2), 9, 0, 1
    End With
  End If
End Sub
 
Ví dụ cột chứa dữ liệu của bạn là cột A.
Cột cần lọc ra danh sách xuất hiện duy nhất là cột B
Ở ô B1 bạn gõ công thức: =if(countif($A$1:A1;A1)>1;"";A1)
Sau đó kéo fill down đến hết dòng cuối cùng.
Ở 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
Cách làm này cũng hay, nhưng mà chức năng filter bị giới hạn trong excel 2003, khi số lượng hàng quá lớn.
 
Lần chỉnh sửa cuối:
Giúp tạo danh sách ngày tháng duy nhất!

Gửi các bạn trên GPE!

Mình có 2 danh sách ngày tháng nằm ở sheet1 và sheet2, mình muốn từ 2 danh sách đó tạo ra 1 danh sách ngày tháng duy nhất tại sheet3.

Mong các bạn giúp đỡ!
 

File đính kèm

  • taodanhsach.xls
    41.5 KB · Đọc: 5
Gửi các bạn trên GPE!

Mình có 2 danh sách ngày tháng nằm ở sheet1 và sheet2, mình muốn từ 2 danh sách đó tạo ra 1 danh sách ngày tháng duy nhất tại sheet3.

Mong các bạn giúp đỡ!
File bạn nên dùng code thích hơp nhất hoặc pivot
 

File đính kèm

  • taodanhsach.xls
    93 KB · Đọc: 10
Gửi các bạn trên GPE!

Mình có 2 danh sách ngày tháng nằm ở sheet1 và sheet2, mình muốn từ 2 danh sách đó tạo ra 1 danh sách ngày tháng duy nhất tại sheet3.

Mong các bạn giúp đỡ!
File bạn mình nghĩ nên dùng code thích hơp nhất hoặc pivot
 

File đính kèm

  • taodanhsach.xls
    93 KB · Đọc: 17
Cái này chỉ là ví dụ bạn ah, hơn nữa trong bảng tính có nhiều vùng dữ liệu chứ không phải có 1 nên không dùng usedrange được (cái này lỗi do mình không nói trước).
Anh chị nào rành cái dzụ dictionary giúp em cái này tí (mục đích để học hỏi chứ với dữ liệu này thì chắc không cần các anh chị đao to búa lớn làm gì)
Cảm ơn các anh chị!
 
Anh chị nào rành cái dzụ dictionary giúp em cái này tí (mục đích để học hỏi chứ với dữ liệu này thì chắc không cần các anh chị đao to búa lớn làm gì)
Muốn dic thì có dít luôn xem file coi nhen
[GPECODE=vb]
Sub DicOnly()
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dim sh As Worksheet
Dim sRange, i As Long


For Each sh In Sheets
If sh.CodeName = "Sheet1" Then
sRange = Sheets("Sheet1").Range("A4:A" & Sheets("Sheet1").Range("A14").End(xlDown).Row).Value

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

End If

If sh.CodeName = "Sheet2" Then
sRange = Sheets("sheet2").Range("C9:C" & Sheets("sheet2").Range("C9").End(xlDown).Row).Value
For i = 1 To UBound(sRange)
If Not Dic.Exists(sRange(i, 1)) Then
Dic.Add sRange(i, 1), ""
End If


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


End Sub


[/GPECODE]
 

File đính kèm

  • taodanhsach.xls
    97.5 KB · Đọc: 28
Muốn dic thì có dít luôn xem file coi nhen
[GPECODE=vb]
Sub DicOnly()
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dim sh As Worksheet
Dim sRange, i As Long


For Each sh In Sheets
If sh.CodeName = "Sheet1" Then
sRange = Sheets("Sheet1").Range("A4:A" & Sheets("Sheet1").Range("A14").End(xlDown).Row).Value

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

End If

If sh.CodeName = "Sheet2" Then
sRange = Sheets("sheet2").Range("C9:C" & Sheets("sheet2").Range("C9").End(xlDown).Row).Value
For i = 1 To UBound(sRange)
If Not Dic.Exists(sRange(i, 1)) Then
Dic.Add sRange(i, 1), ""
End If


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


End Sub


[/GPECODE]
- 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ì
 
Web KT
Back
Top Bottom