Lọc không trùng của 3 cột và Sort (1 người xem)

Liên hệ QC

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

LuuAnh980

Thành viên tiêu biểu
Tham gia
28/9/22
Bài viết
463
Được thích
106
Giới tính
Nữ
Chào các anh chi!!!!
Em có file muôn nhờ các anh chị lọc không trùng của 3 cột và sau khi lọc xong thì sort từ nhỏ đến lớn luôn ạ.
Trong 3 cột có một số dòng rống, thì bỏ qua ạ.
Trong file em có ví dụ ạ.
 

File đính kèm

Chào các anh chi!!!!
Em có file muôn nhờ các anh chị lọc không trùng của 3 cột và sau khi lọc xong thì sort từ nhỏ đến lớn luôn ạ.
Trong 3 cột có một số dòng rống, thì bỏ qua ạ.
Trong file em có ví dụ ạ.
Tiêu chí lọc không trùng dựa vào cột nào, Sort ưu tiên cột nào. Diễn giải rõ ràng vào bạn
 
Upvote 0
Tất cả dựa vào cột E anh ơi, Sort ưu tiên cột E luôn anh ơi.
Mong anh giúp.
 
Upvote 0
Bạn thử kiểm tra kết quả xem đúng chưa nhé!
PHP:
Sub GPE()
    Dim Arr(), Res(), i&, j&, k&, Lr&
    Dim Dic As Object, Key$
    Set Dic = CreateObject("Scripting.Dictionary")
    With Sheets("Sheet1")
        Lr = .Range("E" & Rows.Count).End(xlUp).Row
        Arr = .Range("E2:O" & Lr).Value
        ReDim Res(1 To UBound(Arr), 1 To 3)
        For i = 1 To UBound(Arr)
            If Arr(i, 1) <> "" Then
                Arr(i, 2) = Arr(i, 2) * 1
                Key = Arr(i, 1) & "_" & Arr(i, 11)
                If Not Dic.exists(Key) Then
                    k = k + 1
                    Dic.Add (Key), k
                    Res(k, 1) = Arr(i, 1)
                    Res(k, 2) = Arr(i, 2)
                    Res(k, 3) = Arr(i, 11)
                Else
                    Res(Dic.Item(Key), 2) = Res(Dic.Item(Key), 2) + Arr(i, 2)
                End If
            End If
        Next i
        If k Then
            .Range("T2:V100000").ClearContents
            .Range("U:U").NumberFormat = "0"
            .Range("T2").Resize(k, 3).Value = Res
            With Range("T1:V1000")
                .Sort .Cells(1, 1), 1, Header:=xlGuess
            End With
        End If
    End With
    MsgBox "Hoan Thanh"
    Set Dic = Nothing
End Sub
 
Upvote 0
Chưa đúng anh ơi!!!!
Sao có So ma gì mà lên tới hàng trăm anh
BNBB.png
cột don hang sao canh trai canh phải tùm lum vậy anh.
 
Upvote 0
Được rồi anh @anhtuan2939 ơi, nhưng cột U em muốn là Text mà không được. tức số 1 thành 01.....
 
Upvote 0

File đính kèm

Upvote 0
Upvote 0
Cột số mã không phải cộng dồn, mà lọc đưa qua theo côt Đơn hàng anh @Zl: 0933707265 ơi.
Ủa mà Sort sao kỳ vậy anh @Zl: 0933707265 sao 120,122,125 lại nằm trên 95,99
View attachment 282600
Nó đang sort theo cột đơn hàng.
Bạn đổi
PHP:
            With Range("T1:V1000")
                .Sort .Cells(1, 1), 1, Header:=xlGuess
            End With
Thành
PHP:
            With Range("T1:V1000")
                .Sort .Cells(1, 2), 1, Header:=xlGuess
            End With
Xem được không?!
 
Upvote 0
Thôi đành chấp nhận thôi, vì khi sort cột Số mã thì cột Đơn hàng lại không sort, mà chính của em là cột Đơn hàng.
Em cám ơn các anh @anhtuan2939 và anh @Zl: 0933707265 nhiều !!!
 
Upvote 0
À các anh ơi!!!
Giờ em muốn lọc qua sheet khác thì chỉnh code làm sao anh @Zl: 0933707265 ơi.
 
Lần chỉnh sửa cuối:
Upvote 0
Sao em kéo công thức xuông nó ra như vầy
HT68.png
 
Upvote 0
thiếu Đơn hàng 2925 số mã là 35 , 2925 mã số 43 nữa (các dong 60,62,73,77,78...
 
Upvote 0
Sao code sort không đúng anh @Zl: 0933707265 ơi, sao Đơn hàng 2761, 2926, 2950 sao lại nằm dưới 2937,2990.
Em đã chỉnh code lại Sort theo Đơn hàng rồi.
AnhZL.png
Bài đã được tự động gộp:

 

File đính kèm

Upvote 0
Thử cách này coi thế nào...
 

File đính kèm

Upvote 0
Code của anh @Tống Văn Đệ , muốn lọc qua sheet khác thì chỉnh tên sheet lại phải không anh?
Bài đã được tự động gộp:

Code của anh @Hoàng Tuấn 868 chạy hơi lâu, và số mã anh cứ để nguyên trạng, đừng cho thành 3 số.
 
Lần chỉnh sửa cuối:
Upvote 0
Sao code của anh @Tống Văn Đệ , em muốn lọc qua sheet khác, em chỉnh sheet như này :
Mã:
Sub LocKhongTrung3Cot()
    
    'Xoa du lieu cu
    ClearOld
    
    'Lap danh sach duy nhat moi
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet9.Range("H4").CopyFromRecordset .Execute("Select f1,f2,f11 From [Sheet3$E2:O] Group by f1,f2,f11 ")
    End With

End Sub
thì bị lỗi này:
LoiVD.png
mong các anh chị nào biết chỉ em với.
 
Upvote 0

File đính kèm

Upvote 0
Code bác em mới xem qua, cũng chưa hiểu rõ lắm nhưng có góp ý thế này, nếu chưa phù hợp thì bác bỏ qua nha:
Không nên tách sort và loại trùng ra 2 phần. Như thế sẽ phải lặp nhiều hơn (có thêm vòng for loại trùng), và phía trên, vòng for để sort phải xử lý cả những phần tử trùng. Trong khi mình có thể không cần quan tâm tới những phần tử trùng này
Ý tưởng của em là gộp loại trùng vào trong vòng 'for k' đầu tiên luôn, nếu đã có trong dic thì bỏ qua vấn đề sort luôn (không quan tâm tới nó)
Nếu chưa có trong dic thì mới cho chạy vào vòng 'for i' để sort. Tuy nhiên cũng không nên for i=1 mà nên là for i=k+1 để hạn chế bớt vòng lặp dư thừa.
Em chưa viết, mà chỉ nghĩ như vậy thôi!
 
Upvote 0
Code bác em mới xem qua, cũng chưa hiểu rõ lắm nhưng có góp ý thế này, nếu chưa phù hợp thì bác bỏ qua nha:
Không nên tách sort và loại trùng ra 2 phần. Như thế sẽ phải lặp nhiều hơn (có thêm vòng for loại trùng), và phía trên, vòng for để sort phải xử lý cả những phần tử trùng. Trong khi mình có thể không cần quan tâm tới những phần tử trùng này
Ý tưởng của em là gộp loại trùng vào trong vòng 'for k' đầu tiên luôn, nếu đã có trong dic thì bỏ qua vấn đề sort luôn (không quan tâm tới nó)
Nếu chưa có trong dic thì mới cho chạy vào vòng 'for i' để sort. Tuy nhiên cũng không nên for i=1 mà nên là for i=k+1 để hạn chế bớt vòng lặp dư thừa.
Em chưa viết, mà chỉ nghĩ như vậy thôi!
Chân thành cảm ơn bạn nhé, lâu rồi không đụng đến, lấy code từ ngày xưa (hồi mới lọ mọ vào code) sửa lại cho khớp với dữ liệu của bạn này thôi mà. Có viết mới đâu.
 
Upvote 0
Chân thành cảm ơn bạn nhé, lâu rồi không đụng đến, lấy code từ ngày xưa (hồi mới lọ mọ vào code) sửa lại cho khớp với dữ liệu của bạn này thôi mà. Có viết mới đâu.
Em cũng mới chỉ ý tưởng thôi, không biết viết ra có cấn chỗ nào không :D
Nếu bác có thời gian thì thử xem, giúp người nhưng cũng là giúp mình vận động đầu óc tí nó cũng vui
 
Upvote 0
Em cũng mới chỉ ý tưởng thôi, không biết viết ra có cấn chỗ nào không :D
Nếu bác có thời gian thì thử xem, giúp người nhưng cũng là giúp mình vận động đầu óc tí nó cũng vui
Ngày xưa mới lọ mọ thì đầu tiên thử cách xắp xếp thứ tự nhỏ đến to, sau đó tìm hiểu thêm về Dictionary thì lại viết tiếp đoạn lọc không trùng rồi ghép hai món lại thì nó ra vậy đó bạn.
 
Upvote 0
Cám ơn anh @Hoàng Tuấn 868, code bài mới đã nhanh(0,0715) nhưng chổ số mã em nguyên dạng như vầy :01,02,03....., thì của anh là 1,2,3... Mong anh chỉnh lại code dùm em, và muốn lọc qua sheet2 thì chỉnh code thê nào anh
 
Upvote 0

File đính kèm

Upvote 0
tới anh @Hoàng Tuấn 868 , em có Test code của anh, em thấy vầy:
1/ em xóa dữ liệu lọc đi, và nhấn nút lọc thì nhảy ra MsgBox thời gian -. nhấn OK ->ra dữ liệu loc..Anh chỉnh dùm khi nhấn nút lọc thì ra luôn dữ liệu loc.
2/ Cột số mã em có số mã này: "05/09" thì khi lọc nó lại ra là 05-Sep mặc dù em đã định dạng "05/09" là Text. Mong anh xem giúp.
 
Upvote 0
1/ em xóa dữ liệu lọc đi, và nhấn nút lọc thì nhảy ra MsgBox thời gian -. nhấn OK ->ra dữ liệu loc..Anh chỉnh dùm khi nhấn nút lọc thì ra luôn dữ liệu loc.
1/ Đã bỏ Msgbox.
2/ Cột số mã em có số mã này: "05/09" thì khi lọc nó lại ra là 05-Sep mặc dù em đã định dạng "05/09" là Text. Mong anh xem giúp.
2/ Ở máy tính mình không thấy như vậy nên không biết bị sao để sửa.
 

File đính kèm

Upvote 0
Sory lộn tiệm
 
Upvote 0
Em tải file bài #39 vẫn còn MsgBox, và anh có thử gõ vào sheet1 như em đưa hình rồi chạy lọc thử xem sao ạ.
LocHT.png
 
Upvote 0

File đính kèm

Upvote 0
File đây anh ơi Sheet1 em bôi vàng, sheet2 em bôi vàng .
 

File đính kèm

Upvote 0
Lọc khó vậy anh , ca khó rồi, chắc lọc cùng loại chứ vừa chữ vừa số nó không được.
Cám ơn anh @Hoàng Tuấn 868 nhiều.
Không biết có bác sĩ nào giỏi không, vì đơn hàng của em vừa chữ vừa số.
 
Upvote 0
Bệnh này lang băm như mình chưa nghĩ ra thuốc chữa, chắc phải chờ Bác sĩ đầu ngành thôi bạn.
Làm gì đến nỗi trả bệnh nhân về chờ chết?
Thay
md(k, j + 1) = mn(i, a(j))

bằng
md(k, j + 1) = "'" & mn(i, a(j))

--------
Tuy nhiên, theo tôi bài này dùng advanced filter cho nhẹ đầu
 
Upvote 0
Code Advanced filter và sort
PHP:
Sub AdvFilter_Sort()
Dim LastRw As Long
With Sheet1
    For Each cll In .Range("G1:N1")
        If IsEmpty(cll.Value) Then cll.Value = cll.Address
    Next
    LastRw = .[E10000].End(xlUp).Row
    .Range("E1:O" & LastRw).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheet2.Range( _
            "W1:W2"), CopyToRange:=Sheet2.Range("G1:I1"), Unique:=True
End With
With Sheet2
    .Activate
    LastRw = .[G10000].End(xlUp).Row
    .Range("G1:I" & LastRw).Sort Key1:=.Range("G1"), Order1:=xlAscending, _
    Key2:=.Range("H1"), Order2:=xlAscending, Header:=xlYes
End With
End Sub

Kết quả có vẻ không loại trùng, nhưng thực ra dữ liệu sai: 1 dòng là text, 1 dòng là số. Nếu sửa dữ liệu gốc lại thì ra đúng.

1666975183273.png
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em có thử code của Thầy @ptm0412 đã giải quyết được các số mã 05/09,08/10 rồi, mà chưa chuẩn cột Đơn hàng
Ví dụ đơn hàng 2761 số mã 45 và 2761 số mã 47 lại năm dưới và các đơn trong ngoặc.
LocPTM.png
 
Upvote 0
Em đã định dạng 3 cột : E, F, O về cùng định dạng Text, mà vẫn không được. Đúng là sort 3 cột khó quá.
 
Upvote 0
Em có thử code của Thầy @ptm0412 đã giải quyết được các số mã 05/09,08/10 rồi, mà chưa chuẩn cột Đơn hàng
Ví dụ đơn hàng 2761 số mã 45 và 2761 số mã 47 lại năm dưới và các đơn trong ngoặc.
Cùng 1 lý do với việc trùng: 2761, 2950, ... đang ở dạng text. Chuyển về số hết đi.
 
Upvote 0
Là dạng general hay number Thầy???
 
Upvote 0
Là dạng general hay number Thầy???
Convert to number, không phải định dạng, nhưng làm từ dữ liệu gốc. Tô nguyên khối sao cho ô đầu tiên hoặc ô trắng của vùng chọn có tam giác xanh, rà chuột vào sẽ có hình ! màu vàng, nhấn vào đó chọn convert to number.
 
Upvote 0
Sao em bôi đen cột E, rồi làm sao thấy tâm giác xanh Thầy?
 
Upvote 0
Em thấy rồi, em đã thấy tam giác xanh, nhưng khi chọn vào thì chỉ chọn cell đó không hết khối được, mà file gốc em sao có dạng Text mà không hiện tam giác xanh thầy ơi.
 
Upvote 0
Cám ơn thầy Mỹ, em đã làm được. Vậy có cách nào chống nhập liệu sai định dạng không thầy.
 
Upvote 0
Cám ơn thầy Mỹ, em đã làm được. Vậy có cách nào chống nhập liệu sai định dạng không thầy.
Để general mà nhập liệu, không định dạng gì cả: Không text, không number, không canh trái canh phải canh giữa. Số 02 thì thêm dấu '
 
Upvote 0

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

Back
Top Bottom