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

Liên hệ QC

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

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
355
Đượ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
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 ạ
Mỗi bài viết bạn đưa ra một kiểu hình nhưng không nêu cụ thể, rõ ràng cái mình muốn thực hiện thì tất cả các thành viên đều thấy, biết và hiểu như tôi, cụ thể:
1/ Bài 1, bài 3, bài 6 bạn đưa cái hình dữ liệu chỉ có 1 cột đó là B với tiêu đề ở dòng 4 và nội dung là thế này "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".
2/ Đến bài 12 bạn đưa cái hình dữ liệu có thêm cột ngày (là 2 cột) với tiêu đề ở dòng 2 và nội dung là thế này "nếu đã xóa mã hàng thì xóa luôn ô cột ngày".
3/ Đến bài 14 thì hình vẫn có 2 cột như bài 12 nhưng ngày của từng Cell trong cột C khác với bài 12.
4/ Đến bài 17 thì hình vẫn có 2 cột như bài 12, bài 14 nhưng cột ngày của từng Cell trong cột C dữ liệu lại giả định và có trình tự liên tục.
5/ Đến bài 19 thì hình có 4 cột với tiêu đề ở dòng 3 và nội dung là thế này "dựa vào cột mã hàng (cột B) thôi, Nếu cột B có mã hàng trùng thì xóa dòng" nhưng đưa cái hình thì xóa dữ liệu từ cột B tới cột C.

Tóm lại:
- Về xóa nội dung trùng lặp: Lúc thì bạn muốn trong 1 cột, lúc thì 2 cột, lúc thì 4 cột và dữ liệu mỗi lần đưa lên cũng khác nhau.
- Về tiêu đề cột: Mỗi lần đưa lên cũng khác nhau, lúc thì dòng 2, lúc thì dòng 3, lúc thì dòng 4.

Nói chung:
- Bạn hay phát sinh những thứ không đáng có, dù cho bạn có đưa File giả định nhưng tiêu đề phải sát thực tế giống với File đang theo dõi.
- Muốn xóa dữ liệu ở những cột nào thì phải nêu rõ ràng, cụ thể từ đấu bài 1, nhưng bạn không cụ thể mà phát sinh liên tục.
- Đến bài 19 thì muốn xóa dữ liệu ở 4 cột không biết giúp xong có phát sinh thêm xóa cột cách quãng nữa không (tôi lường trước vụ này nên chạy trước).
 
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.
Chỉ chọn cột Mã 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.Resize(1, 2).ClearContents
    End If
Next

End Sub
Muốn xóa 4 cột liên tiếp, sửa thành:
cel.Resize(1, 4).ClearContents
 
Upvote 0
Chỉ chọn cột Mã 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.Resize(1, 2).ClearContents
    End If
Next

End Sub
Muốn xóa 4 cột liên tiếp, sửa thành:
cel.Resize(1, 4).ClearContents

Dạ em cảm ơn anh thật sự a trả lời quá đúng ý e luôn, e muốn 2 3 4..n cột gì gì đó thì em biết sửa lại code rồi. cảm ơn anh nhiều
Bài đã được tự động gộp:

Mỗi bài viết bạn đưa ra một kiểu hình nhưng không nêu cụ thể, rõ ràng cái mình muốn thực hiện thì tất cả các thành viên đều thấy, biết và hiểu như tôi, cụ thể:
1/ Bài 1, bài 3, bài 6 bạn đưa cái hình dữ liệu chỉ có 1 cột đó là B với tiêu đề ở dòng 4 và nội dung là thế này "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".
2/ Đến bài 12 bạn đưa cái hình dữ liệu có thêm cột ngày (là 2 cột) với tiêu đề ở dòng 2 và nội dung là thế này "nếu đã xóa mã hàng thì xóa luôn ô cột ngày".
3/ Đến bài 14 thì hình vẫn có 2 cột như bài 12 nhưng ngày của từng Cell trong cột C khác với bài 12.
4/ Đến bài 17 thì hình vẫn có 2 cột như bài 12, bài 14 nhưng cột ngày của từng Cell trong cột C dữ liệu lại giả định và có trình tự liên tục.
5/ Đến bài 19 thì hình có 4 cột với tiêu đề ở dòng 3 và nội dung là thế này "dựa vào cột mã hàng (cột B) thôi, Nếu cột B có mã hàng trùng thì xóa dòng" nhưng đưa cái hình thì xóa dữ liệu từ cột B tới cột C.

Tóm lại:
- Về xóa nội dung trùng lặp: Lúc thì bạn muốn trong 1 cột, lúc thì 2 cột, lúc thì 4 cột và dữ liệu mỗi lần đưa lên cũng khác nhau.
- Về tiêu đề cột: Mỗi lần đưa lên cũng khác nhau, lúc thì dòng 2, lúc thì dòng 3, lúc thì dòng 4.

Nói chung:
- Bạn hay phát sinh những thứ không đáng có, dù cho bạn có đưa File giả định nhưng tiêu đề phải sát thực tế giống với File đang theo dõi.
- Muốn xóa dữ liệu ở những cột nào thì phải nêu rõ ràng, cụ thể từ đấu bài 1, nhưng bạn không cụ thể mà phát sinh liên tục.
- Đến bài 19 thì muốn xóa dữ liệu ở 4 cột không biết giúp xong có phát sinh thêm xóa cột cách quãng nữa không (tôi lường trước vụ này nên chạy trước).

dạ em cảm ơn bác, chắc do em không biết cách nói cho bác hiểu được. Mà code bạn Phươc Cam đã giúp vậy là hoàn toàn đúng ý em rồi. Chỉ khác mổi e muốn xóa 1 ,2,3,4.. cột thì phải thay đổi được số cột là xong, Còn kiểm tra vẩn kiểm tra trên cột B có trùng hay không thôi
Mã:
Sub XoaTrung()
On Error Resume Next
Dim cel As Range
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")
Application.ScreenUpdating = False
For Each cel In Range("B3:B5000") ' Chi kiem tra tren cot B thoi
    If Not Dic.exists(cel.Value) Then
        Dic.Add cel.Value, ""
    Else
        cel.Resize(1, 2).ClearContents ' Cho nay 2 la 2 cot, e muon 4 cot hay n cot la em thay so Vi tri nay
    End If
Next
Application.ScreenUpdating = True

End Sub
 
Upvote 0
Bạn thay
Mã:
   cel.Resize(1, 2).ClearContents
thành
Mã:
cel.EntireRow.ClearContents 'Cái này xóa nguyên 1 dòng cho khỏe

dạ thì đó em chỉ hỏi vậy thôi. cảm ơn Chị . chỉ mỏi thắc mắc thay vì xóa 1 ô cột B em muốn nó xóa luôn các dòng với nó luôn . Nhưng em chỉ áp dụng cái
cel.Resize(1, n).ClearContents ' trong đó n là số cột cần xóa
do File em còn làm mấy công thức vớ vấn phía bên Phải bảng tính nên không dùng code của chị được.
 
Upvote 0

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

Back
Top Bottom