Các bạn cho mình hỏi làm sao xóa được số trùng nhau

Liên hệ QC

congnguyen88

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/7/14
Bài viết
356
Được thích
31
Chào các bạn. Mình có 1 file quản lý tên hàng của công ty. Do mã hàng nó sắp xếp trùng nhau. Mình muốn xóa những mã hàng nào trùng phía dưới chỉ chừa lại 1 mã hàng nằm trên cùng làm đại diện thôi. CHo mình hỏi Code viết làm sao để xóa được. Em xin cảm ơn anh chị

1584869128179.png
 
Upvote 0
Chào các bạn. Mình có 1 file quản lý tên hàng của công ty. Do mã hàng nó sắp xếp trùng nhau. Mình muốn xóa những mã hàng nào trùng phía dưới chỉ chừa lại 1 mã hàng nằm trên cùng làm đại diện thôi. CHo mình hỏi Code viết làm sao để xóa được. Em xin cảm ơn anh chị

View attachment 233798
Thì cho nó một đoạn code những Cell nào giống nhau thì Merge and Center.
Nhập liệu vào thì tốn công, sao bạn xóa nó đi và chừa lại những Cell trống để làm gì? Nếu không ảnh hưởng gì đến các cột khác thì tại sao không sử dụng Remove Duplicates cho nhanh.
 
Lần chỉnh sửa cuối:
Upvote 0
Thì cho nó một đoạn code những Cell nào giống nhau thì Merge and Center.
Nhập liệu vào thì tốn công, sao bạn xóa nó đi và chừa lại những Cell trống để làm gì? Nếu không ảnh hưởng gì đến các cột khác thì tại sao không sử dụng Remove Duplicates cho nhanh.
Dạ dữ liệu đó từ 1 phần mềm khác Xuất ra. em muốn xóa đi những ký tự trùng thôi chừa lại 1 ký tự đại diện thôi. Em không muốn Merge and Center. Mong anh chị giúp đở
Bài đã được tự động gộp:

Thì Bạn làm sang cột bên cạnh xong dán nó vào. Ai lại chơi xóa chứng cứ như vậy :p:p:p
Ý mình là xóa nhưng con số trùng nhau chỉ chừa lại 1 số đai diện nằm trên cùng thôi. Mình có thử áp dụng công thức của bạn vẫn không được.1584880824156.png
Cái này sao mà dùng công thức được. ý của em là xóa đi những con số trùng mà
 
Upvote 0
Chọn vùng rồi chạy code:
PHP:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Selection
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub
 
Upvote 0
Dạ dữ liệu đó từ 1 phần mềm khác Xuất ra. em muốn xóa đi những ký tự trùng thôi chừa lại 1 ký tự đại diện thôi. Em không muốn Merge and Center. Mong anh chị giúp đở
Bài đã được tự động gộp:


Ý mình là xóa nhưng con số trùng nhau chỉ chừa lại 1 số đai diện nằm trên cùng thôi. Mình có thử áp dụng công thức của bạn vẫn không được.View attachment 233816
Cái này sao mà dùng công thức được. ý của em là xóa đi những con số trùng mà
Bạn thử làm cách sau:
sử dụng cột phụ:
PHP:
=IF(COUNTIF($A$2:$A2,A2)=1,A2,"")
Rồi fill xuống.
1.Sau đó để con trỏ chuột trên đầu: Nhấn CTRL+SHIFT+L
2. Sau đó fillter chọn Blank, Sau đó xóa những dòng đó đi.
3. Bỏ Filter xem kết quả.
 
Upvote 0
Chọn vùng rồi chạy code:
PHP:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Selection
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub
dạ em cảm ơn anh.Code chạy hay quá. Em cảm ơn anh nhiều lắm
Mã:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Range("B3:B5000")
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub
Bài đã được tự động gộp:

dạ em cảm ơn anh.Code chạy hay quá. Nhưng em test bảng tính em 5000 ô nó giật giật sao anh á
Mã:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Range("B3:B5000")
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub
 
Upvote 0
Chào các bạn. Mình có 1 file quản lý tên hàng của công ty. Do mã hàng nó sắp xếp trùng nhau. Mình muốn xóa những mã hàng nào trùng phía dưới chỉ chừa lại 1 mã hàng nằm trên cùng làm đại diện thôi. CHo mình hỏi Code viết làm sao để xóa được. Em xin cảm ơn anh chị
Thử code sau, với điều kiện bất kỳ sheet nào đó có dữ liệu bắt đầu là B5.

Mã:
Sub XoaDup()
    Dim xCell As Range
    Dim Chon As Range
    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Chon = Range("B5", Range("B10000").End(xlUp))
    For Each xCell In Chon
        If Not Dic.exists(xCell.Value) Then
            Dic.Add xCell.Value, ""
            Else
            xCell.ClearContents
        End If
    Next
End Sub
 
Upvote 0
Thử code sau, với điều kiện bất kỳ sheet nào đó có dữ liệu bắt đầu là B5.

Mã:
Sub XoaDup()
    Dim xCell As Range
    Dim Chon As Range
    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Chon = Range("B5", Range("B10000").End(xlUp))
    For Each xCell In Chon
        If Not Dic.exists(xCell.Value) Then
            Dic.Add xCell.Value, ""
            Else
            xCell.ClearContents
        End If
    Next
End Sub
cảm ơn anh nhiều. Code hay lắm ạ
Bài đã được tự động gộp:

Bạn thử làm cách sau:
sử dụng cột phụ:
PHP:
=IF(COUNTIF($A$2:$A2,A2)=1,A2,"")
Rồi fill xuống.
1.Sau đó để con trỏ chuột trên đầu: Nhấn CTRL+SHIFT+L
2. Sau đó fillter chọn Blank, Sau đó xóa những dòng đó đi.
3. Bỏ Filter xem kết quả.


Vầy đi cho nó gọn anh ơi =IF(B3=B2,"",B3)
1584887962212.png
 
Upvote 0
Thử code sau, với điều kiện bất kỳ sheet nào đó có dữ liệu bắt đầu là B5.

Mã:
Sub XoaDup()
    Dim xCell As Range
    Dim Chon As Range
    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Chon = Range("B5", Range("B10000").End(xlUp))
    For Each xCell In Chon
        If Not Dic.exists(xCell.Value) Then
            Dic.Add xCell.Value, ""
            Else
            xCell.ClearContents
        End If
    Next
End Sub

anh ơi cho em hỏi em muốn xóa thêm 1 cột bên trái nữa ( cột ngày ) thì phải sửa code thế nào. Em không biết thêm Resize vào chổ nào nữa. nghĩa là code trên chỉ xóa được 1 ô của cột mã hàng, giờ làm sao nếu đã xóa mã hàng thì xóa luôn ô cột ngày Resize (2) . mà sao em thêm Resize vào nó không chạy được

1584889725250.png
 
Upvote 0
anh ơi cho em hỏi em muốn xóa thêm 1 cột bên trái nữa ( cột ngày ) thì phải sửa code thế nào. Em không biết thêm Resize vào chổ nào nữa. nghĩa là code trên chỉ xóa được 1 ô của cột mã hàng, giờ làm sao nếu đã xóa mã hàng thì xóa luôn ô cột ngày Resize (2) . mà sao em thêm Resize vào nó không chạy được

View attachment 233833
Hầu như việc này tôi đã góp ý cho rất nhiều thành viên rồi nhưng bạn lại không đọc.
1/ Cụ thể là muốn làm cái gì đó thì phải có tiêu đề giống với thực tế: Bài 1 đưa cái hình dữ liệu bắt đầu là B5, bài 12 đưa cái hình dữ liệu bắt đầu là B3.
2/ Bài 1 yêu cầu thực hiện chỉ có cột B, bài 12 lại phát sinh cột C.

3/ Thay dòng code này:
Set Chon = Range("B3", Range("C10000").End(xlUp))

Thế chỗ dòng code này:
Set Chon = Range("B5", Range("B10000").End(xlUp))
 
Lần chỉnh sửa cuối:
Upvote 0
Thay dòng code này:
Set Chon = Range("B5", Range("B10000").End(xlUp))

Bởi dòng code này:
Set Chon = Range("B3", Range("C10000").End(xlUp))

1584890792627.png
Mã:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Range("B3:c5000")
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub

Em đã thử code nó xóa được mổi mã hàng còn cột Ngày vẩn còn y. ý em Mã hàng là Khóa chính. nếu đã xóa Mã hàng thì Ngày cũng phải xóa theo luôn. tức là code chỉ cần đếm trùng trên mả hàng thôi mà khi xóa thì xóa thêm ô cột ngày nữa
Bài đã được tự động gộp:

Hầu như việc này tôi đã góp ý cho rất nhiều thành viên rồi nhưng bạn lại không đọc.
1/ Cụ thể là muốn làm cái gì đó thì phải có tiêu đề giống với thực tế: Bài 1 đưa cái hình dữ liệu bắt đầu là B5, bài 12 đưa cái hình dữ liệu bắt đầu là B3.
2/ Bài 1 yêu cầu thực hiện chỉ có cột B, bài 12 lại phát sinh cột C.

3/ Thay dòng code này:
Set Chon = Range("B3", Range("C10000").End(xlUp))

Thế chỗ dòng code này:
Set Chon = Range("B5", Range("B10000").End(xlUp))

Kiểu nó như vầy nek anh ơi
1584891112180.png
 
Upvote 0
View attachment 233835
Mã:
Sub XoaTrung()
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")

For Each cel In Range("B3:c5000")
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.ClearContents
    End If
Next

End Sub

Em đã thử code nó xóa được mổi mã hàng còn cột Ngày vẩn còn y. ý em Mã hàng là Khóa chính. nếu đã xóa Mã hàng thì Ngày cũng phải xóa theo luôn. tức là code chỉ cần đếm trùng trên mả hàng thôi mà khi xóa thì xóa thêm ô cột ngày nữa
Bài đã được tự động gộp:



Kiểu nó như vầy nek anh ơi
View attachment 233837
Bạn sửa code của phuocam, đâu phải code trong bài viết của tôi.

Bạn lấy râu ông nọ cắm càm bà kia thì làm sao mà không sai, tôi sửa lại cho bạn.
Mã:
Sub XoaDup()
    Dim xCell As Range
    Dim Chon As Range
    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Chon = Range("B3", Range("C10000").End(xlUp))
    For Each xCell In Chon
        If Not Dic.exists(xCell.Value) Then
            Dic.Add xCell.Value, ""
            Else
            xCell.ClearContents
        End If
    Next
End Sub
 
Upvote 0
Set rg = Range("B5:B27")
For i = rg.Rows.Count To 2 Step -1
If Application.Match(rg.Cells(i), rg, 0) <> i Then rg.Offset(i-1,0).Resize(1,2).ClearContents
Next i
 
Upvote 0
Bạn sửa code của phuocam, đâu phải code trong bài viết của tôi.

Bạn lấy râu ông nọ cắm càm bà kia thì làm sao mà không sai, tôi sửa lại cho bạn.
Mã:
Sub XoaDup()
    Dim xCell As Range
    Dim Chon As Range
    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Chon = Range("B3", Range("C10000").End(xlUp))
    For Each xCell In Chon
        If Not Dic.exists(xCell.Value) Then
            Dic.Add xCell.Value, ""
            Else
            xCell.ClearContents
        End If
    Next
End Sub

1584893164147.png
dạ lần này em copy y chan Code của anh. Vẫn không xóa được cột ngày. Tức là dòng nào mã hàng xóa thì dòng ngày cũng phải xóa theo luôn
Bài đã được tự động gộp:

Set rg = Range("B5:B27")
For i = rg.Rows.Count To 2 Step -1
If Application.Match(rg.Cells(i), rg, 0) <> i Then rg.Offset(i-1,0).Resize(1,2).ClearContents
Next i

Mã:
Sub xoatrungok()
Dim rg As Range, i As Long
Set rg = Range("B3:B43")
For i = rg.Rows.Count To 2 Step -1
If Application.Match(rg.Cells(i), rg, 0) <> i Then rg.Offset(i - 1, 0).Resize(1, 2).ClearContents
Next i
End Sub

Code bác chạy rất nhanh và chính xác. Nhưng khi có dòng trống thì báo lổi . Ví dụ dữ liệu chỉ có từ B3:B30 mà trong code B3:B100 thì báo lỗi. bác có thể sửa lại giúp em bỏ qua dòng trống là ok. Ví dụ em cho dử liệu nguồn em là B3:B1000 là cố định chẳng hạn thì nếu dử liệu chỉ có B3:B10 thì không bị lỗi. em cảm ơn bác !
 
Lần chỉnh sửa cuối:
Upvote 0
View attachment 233841
dạ lần này em copy y chan Code của anh. Vẫn không xóa được cột ngày. Tức là dòng nào mã hàng xóa thì dòng ngày cũng phải xóa theo luôn
Bài đã được tự động gộp:



Mã:
Sub xoatrungok()
Dim rg As Range, i As Long
Set rg = Range("B3:B43")
For i = rg.Rows.Count To 2 Step -1
If Application.Match(rg.Cells(i), rg, 0) <> i Then rg.Offset(i - 1, 0).Resize(1, 2).ClearContents
Next i
End Sub

Code bác chạy rất nhanh và chính xác. Nhưng khi có dòng trống thì báo lổi . Ví dụ dữ liệu chỉ có từ B3:B30 mà trong code B3:B100 thì báo lỗi. bác có thể sửa lại giúp em bỏ qua dòng trống là ok. Ví dụ em cho dử liệu nguồn em là B3:B1000 là cố định chẳng hạn thì nếu dử liệu chỉ có B3:B10 thì không bị lỗi. em cảm ơn bác !
Dữ liệu cột C của bạn từ a1: a34 có cái nào trùng lặp đâu mà đòi xóa.
 
Upvote 0
Dữ liệu cột C của bạn từ a1: a34 có cái nào trùng lặp đâu mà đòi xóa.
Vậy là bác lại hiểu nhầm rồi. Cột C đó mình không quan tâm. mình chỉ quan tâm cột mã hàng ( cột B) thôi, Nếu trùng cột B thì xóa dòng của cột B và xóa luôn dòng của cột C luôn bác ạ
Em ví dụ bảng tính có 4 cột. Thì kiểm tra cột Mã nếu trùng thì xóa. mà đã xóa cột Mã thì mấy dòng của cột còn lại cũng phải xóa luôn bác ạ
1584895032661.png
 
Upvote 0
Web KT
Back
Top Bottom