Nhờ giúp xóa dữ liệu không trùng ạ

Liên hệ QC

hac4tmdt

Thành viên mới
Tham gia
5/6/13
Bài viết
8
Được thích
0
Em có file đính kèm thế này (chỉ có cột A và B thui - có nhiều dòng tương ứng)
Em đã đánh dấu màu các dữ liệu trùng là màu đỏ rồi, giờ chỉ còn những dữ liệu không trùng muốn xóa đi (thủ công mà mỏi tay quá)
1. Em muốn xóa hết những dữ liệu không trùng đi
2. sắp xếp những dữ liệu trùng (Trùng n lần,...., trùng 4 lần, trùng 3 lần...)

Em biết là không khó nhưng trình độ em hơi gà, nhờ anh chị trong group giúp em luôn ạ
XIn chân thành cảm ơn anh chị em !
 

File đính kèm

  • Like page UID comment 375197022873518.xlsx
    721.7 KB · Đọc: 5
Em có file đính kèm thế này (chỉ có cột A và B thui - có nhiều dòng tương ứng)
1. Em muốn xóa hết những dữ liệu không trùng đi
2. sắp xếp những dữ liệu trùng (Trùng n lần,...., trùng 4 lần, trùng 3 lần...)
XIn chân thành cảm ơn anh chị em !
Căn cứ vào dữ liệu bạn cung cấp mình làm 1 code gắn vào button 1 và có thêm vào dòng trên cùng 1 dòng tiêu đề.
Bạn click vào Button tại sheet 1 sẽ được kết quả như sau :
1. Lọc và Chọn các dữ liệu trùng từ sheet 1 copy sang sheet 2 (như vậy dữ liệu ở sheet 2 đã ko còn tồn tại những dữ liệu không trùng)
2. Tại sheet 2 sắp xếp những dữ liệu trùng theo thứ tự từ (Trùng n lần,...., trùng 4 lần, trùng 3 lần...)
Vì file gốc của bạn lên đến hơn 20.000 dòng nên mình làm lại 1 file có 1.000 dòng để giảm dung lượng cho máy chủ của GPE và chạy code cho nhanh bạn có thể xem thử
(Và Bạn cũng yên tâm là Code của mình vẫn chạy được trên file có 20.000 dòng)
Dưới đây là code
Mã:
Sub Button1_Click()
    Sheets("Sheet2").Select
 Range("A1:U65000").Clear
Sheets("Sheet1").Select
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(R2C1:R20210C1,RC[-2])"
    Columns("C:C").Select
    Selection.NumberFormat = "#,##0.00"
    Selection.NumberFormat = "#,##0.0"
    Selection.NumberFormat = "#,##0"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C20210")
    Range("C2:C20210").Select
    Columns("C:C").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C1").Select
    ActiveSheet.Range("$A$1:$C$20210").AutoFilter Field:=3, Criteria1:=">1", _
        Operator:=xlAnd
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1:C1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range("C1").Select
    ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("A:A").ColumnWidth = 16.43
    Columns("B:B").ColumnWidth = 24.43
    Columns("B:B").ColumnWidth = 71.14
    Sheets("Sheet1").Select
    Range("C1").Select
    ActiveSheet.Range("$A$1:$C$20210").AutoFilter Field:=3
End Sub
 

File đính kèm

  • Like page UID comment 375197022873518-test.xlsm
    241.6 KB · Đọc: 6
Lần chỉnh sửa cuối:
Căn cứ vào dữ liệu bạn cung cấp mình làm 1 code gắn vào button 1 và có thêm vào dòng trên cùng 1 dòng tiêu đề.
Bạn click vào Button tại sheet 1 sẽ được kết quả như sau :
1. Lọc và Chọn các dữ liệu trùng từ sheet 1 copy sang sheet 2 (như vậy dữ liệu ở sheet 2 đã ko còn tồn tại những dữ liệu không trùng)
2. Tại sheet 2 sắp xếp những dữ liệu trùng theo thứ tự từ (Trùng n lần,...., trùng 4 lần, trùng 3 lần...)
Vì file gốc của bạn lên đến hơn 20.000 dòng nên mình làm lại 1 file có 1.000 dòng để giảm dung lượng cho máy chủ của GPE và chạy code cho nhanh bạn có thể xem thử
(Và Bạn cũng yên tâm là Code của mình vẫn chạy được trên file có 20.000 dòng)
Dưới đây là code
Mã:
Sub Button1_Click()
    Sheets("Sheet2").Select
 Range("A1:U65000").Clear
Sheets("Sheet1").Select
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(R2C1:R20210C1,RC[-2])"
    Columns("C:C").Select
    Selection.NumberFormat = "#,##0.00"
    Selection.NumberFormat = "#,##0.0"
    Selection.NumberFormat = "#,##0"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C20210")
    Range("C2:C20210").Select
    Columns("C:C").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("C1").Select
    ActiveSheet.Range("$A$1:$C$20210").AutoFilter Field:=3, Criteria1:=">1", _
        Operator:=xlAnd
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1:C1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range("C1").Select
    ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("A:A").ColumnWidth = 16.43
    Columns("B:B").ColumnWidth = 24.43
    Columns("B:B").ColumnWidth = 71.14
    Sheets("Sheet1").Select
    Range("C1").Select
    ActiveSheet.Range("$A$1:$C$20210").AutoFilter Field:=3
End Sub
cho mình hỏi là cũng bài toán xóa dữ liệu trùng như thế, nhưng ví dụ mình có dữ liệu ở cột A gồm khoảng 100.000 dòng, mình so sánh với các cột B-C-D-E..v..v, nếu phát hiện ô cel nào trùng thì xóa, chỉ giữ lại những giá trị không trùng lặp thì xử lý ntn ạ?
 
cho mình hỏi là cũng bài toán xóa dữ liệu trùng như thế, nhưng ví dụ mình có dữ liệu ở cột A gồm khoảng 100.000 dòng, mình so sánh với các cột B-C-D-E..v..v, nếu phát hiện ô cel nào trùng thì xóa, chỉ giữ lại những giá trị không trùng lặp thì xử lý ntn ạ?
Bạn phải đưa file giả định lên thì để có chỗ viết code, hoặc công thức chứ.
 
dạ đây ạ, mong được giúp đỡ
Bạn xem file đính kèm.
Code này chỉ so sánh Dữ liệu cột A với các cột B,C,D,E. nếu trùng thì
Xóa bỏ ô trùng (cột A).
Những mã không trùng được liệt kê ỏ cột G,
Những mã trùng được liệt kê ở cột H.
 

File đính kèm

  • xóa giá trị trùng ở cột A so vs các cột còn lại.xlsm
    4.4 MB · Đọc: 14
Bạn xem file đính kèm.
Code này chỉ so sánh Dữ liệu cột A với các cột B,C,D,E. nếu trùng thì
Xóa bỏ ô trùng (cột A).
Những mã không trùng được liệt kê ỏ cột G,
Những mã trùng được liệt kê ở cột H.
cho mình hỏi là, ở đoạn :
.[A1].Resize(i, 1) = Arr
.[G1].Resize(k, 1) = KTrung
.[H1].Resize(k, 1) = Trung
Mình xóa 2 dòng dưới, chỉ cần dòng kết quả ở cột A đã xóa những ô trùng, thì đoạn code vẫn tự hiểu là so sánh trùng giữa cột A so vs B-C-D-E-F...v.v, cho tới cột cuối cùng sheets có giá trị đúng ko? ví dụ trong sheets của mình thì dữ liệu tới đến cột DD. Cảm ơn rất nhiều ạ
 
cho mình hỏi là, ở đoạn :
.[A1].Resize(i, 1) = Arr
.[G1].Resize(k, 1) = KTrung
.[H1].Resize(k, 1) = Trung
Mình xóa 2 dòng dưới, chỉ cần dòng kết quả ở cột A đã xóa những ô trùng, thì đoạn code vẫn tự hiểu là so sánh trùng giữa cột A so vs B-C-D-E-F...v.v, cho tới cột cuối cùng sheets có giá trị đúng ko? ví dụ trong sheets của mình thì dữ liệu tới đến cột DD. Cảm ơn rất nhiều ạ
Nôm na là Code sẽ duyệt qua tất cả các phần tử trong mảng Arr( như trong bài là từ A1: E& dòng cuối)đưa vào dic. sau đó duyệt qua các phần tử của Mảng nguồn (từ A1:A dòng cuối) nếu thấy đã có trong dic thì xóa bỏ. sau đó gán lại vào Sh. Do vậy nếu dữ liệu đến cột nào của sh thì khi gán mảng Arr phải lấy tới đó. (ví dụ dữ liệu đến cột DD thì mảng Arr phải là Arr=Range("A1:DD"& dòng cuối).
 
ột A gồm khoảng 100.000 dòng, mình so sánh với các cột B-C-D-E..v..v, nếu phát hiện ô cel nào trùng thì xóa, chỉ giữ lại những giá trị không trùng lặp thì xử lý ntn

Nôm na là Code sẽ duyệt qua tất cả các phần tử trong mảng Arr( như trong bài là từ A1: E& dòng cuối)đưa vào dic. sau đó duyệt qua các phần tử của Mảng nguồn (từ A1:A dòng cuối) nếu thấy đã có trong dic thì xóa bỏ. sau đó gán lại vào Sh. Do vậy nếu dữ liệu đến cột nào của sh thì khi gán mảng Arr phải lấy tới đó. (ví dụ dữ liệu đến cột DD thì mảng Arr phải là Arr=Range("A1:DD"& dòng cuối).
Ah mình đã chỉnh được theo ý muốn,
 
a/c HUONGHCKT có thể giúp em bài toán như này được ko? Bài của em là liệt kê tổ hợp chập, file bên dưới là tổ hợp chập 5 của 30 phần tử, liệt kê ở cột L,M,N,O,P kết quả được 142.506 kết quả. Nhưng nếu em tăng số lượng lên ví dụ như tổ hợp chập 7 của 30 phần tử thì sẽ được 2.035.800 kết quả trong khi excel chỉ hỗ trợ < 1,3 triệu dòng. Vậy có cách nào xử lý ko ạ (điều kiện là đủ kết quả, có thể xuất kết quả ra 2-3 đoạn ví dụ ra thêm ở cột Q,R,S,T,U...v..v )
em cảm ơn.
 

File đính kèm

  • tổ hợp chập5 của 30 phần tử.txt
    6.6 KB · Đọc: 4
a/c HUONGHCKT có thể giúp em bài toán như này được ko? Bài của em là liệt kê tổ hợp chập, file bên dưới là tổ hợp chập 5 của 30 phần tử, liệt kê ở cột L,M,N,O,P kết quả được 142.506 kết quả. Nhưng nếu em tăng số lượng lên ví dụ như tổ hợp chập 7 của 30 phần tử thì sẽ được 2.035.800 kết quả trong khi excel chỉ hỗ trợ < 1,3 triệu dòng. Vậy có cách nào xử lý ko ạ (điều kiện là đủ kết quả, có thể xuất kết quả ra 2-3 đoạn ví dụ ra thêm ở cột Q,R,S,T,U...v..v )
em cảm ơn.
Bạn Sao không gửi file tổ hợp chập ấy mà lại gửi cái file .txt.
Theo tôi bạn cứ mở một topic mới và up cái file tổ hợp chập ấy lên diễn đàn.Tôi tin là sẽ có người giúp được bạn. Còn cái fil .txt tôi tin là sẽ có người không muốn xem và thật ra có muốn xem thì cũng không thể xem được, không thể căng nao ra để đoán

Nó đây khi tải về máy tôi
............
Sub GetCombins(ByVal number As Long, ByVal number_chosen As Long, ArrCombins())
Dim index As Long, count As Double, result() As Long, ArrState() As Long, r As Long, c As Long
' ti?m t?t ca? caE nhoE number_chosen s? t?? number s?: 1, 2, ..., number. T?E ti?m caE t? h?p ch?p
' number_chosen cu?a number. KEt qua? tra? vE trong ma?ng ArrCombins - trong m?i nhoE kEt qua? caE s? E?c
' s?p xEp t?g d?n. V?i caEh tra? vE kEt qua? nh? v?y thi? s? th?Ek trong m?i nhoE, v?i k = 1, 2, ..., number_chosen,
' chi? coEthE l?y giaEtri l?n nh?t la? number - number_chosen + k
' ma?ng ArrState g?m number_chosen c?t va? 2 do?ng: ? th?i ?Em th?? hi? vo?ng l?p m?i Do ... Loop (A) thi? do?ng 1
' ch?E caE s? cu?a nhoE kEt qua? hiEn ha?nh. C?t 2 ch?E caE giaEtriEl?n nh?t ma? s? th?Ek trong nhoE kEt qua? coEthE l?y
' caE nhoE ti?m E? E?c nh? trong caE c?t li? tiEp cu?a ma?ng result. T?E ma?ng result coE7 do?ng
' va? s? c?t b?ng s? kEt qua? ti?m E?c
If number < number_chosen Then Exit Sub
.......
 
a/c HUONGHCKT có thể giúp em bài toán như này được ko? Bài của em là liệt kê tổ hợp chập, file bên dưới là tổ hợp chập 5 của 30 phần tử, liệt kê ở cột L,M,N,O,P kết quả được 142.506 kết quả. Nhưng nếu em tăng số lượng lên ví dụ như tổ hợp chập 7 của 30 phần tử thì sẽ được 2.035.800 kết quả trong khi excel chỉ hỗ trợ < 1,3 triệu dòng. Vậy có cách nào xử lý ko ạ (điều kiện là đủ kết quả, có thể xuất kết quả ra 2-3 đoạn ví dụ ra thêm ở cột Q,R,S,T,U...v..v )
em cảm ơn.
Bạn thử nghiên cứu đoạn code này biết đâu có tác dụng.
Mã:
Option Explicit

Sub Thu()
Dim i&, n&, k&

For i = 1 To 150
n = (i Mod 10) + 1
k = Int(i / 10) + 1
    Sheet5.Cells(n, k) = i
Next i

End Sub
đoạn code trên sẽ tách dải 150 số thành 15 cột (mỗi cột 10 số), Bạn hãy thử nó với số i lớn hơn (i=10000, i=1000000....) xem sao.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom