Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

Kiểm tra trùng dữ liệu trong 1 cột (dùng Code)

Thảo luận trong 'Excel và các ngôn ngữ lập trình khác' bắt đầu bởi thanhnhanubnd, 31 Tháng ba 2009.

  1. thanhnhanubnd

    thanhnhanubnd Thành viên hoạt động

    Mình có cột F có dữ liệu, bao gồm số và chữ : 1,2, 2a, 3b....
    Mình muốn hỏi dùng code thế nào để phát hiện số trùng và hiện Mgsbox thông báo những số trùng đó. Thank
     
  2. dunglev

    dunglev Thành viên mới

    bạn tự sửa lại đoạn code này từ tô màu đỏ cho những ô có giá trị giống nhau sang hiển thị thông báo msgbox như bạn cần nhé
     

    Các file đính kèm:

  3. HYen17

    HYen17 Thành viên cằn cỗi.

    Thêm 1 macrro nữa để bạn tham khảo

    Chú ý khi dùng: Bạn thêm bên phải liền kề 1 cột trắng, sẽ OK!
    PHP:
    Option Explicit
    Sub TimTrung
    ()
     
    Dim eRw As LongWw As Long:           Dim MyAdd As String
     Dim Rng 
    As RangesRng As Range
     
     eRw 
    = [f65500].End(xlUp).Row:          Columns("G:G").Clear
     
    For Ww 1 To eRw
        With Cells
    (Ww"F")
            If .
    Offset(, 1).Value "" Then
                Set Rng 
    = .Offset(1).Resize(eRw)
                
    Set sRng Rng.Find(.Value, , xlFormulasxlWhole)
                If 
    Not sRng Is Nothing Then
                    MyAdd 
    sRng.Address
                    
    Do
                        
    sRng.Offset(, 1) = .Address
                        Set sRng 
    Rng.FindNext(sRng)
                    
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
                End 
    If
            
    End If
        
    End With
     Next Ww
    End Sub
    & sau đây là kết quả sau khi chạy macro:
    Column1Column2
    FG
    An 01
    An 06
    An 07
    An 08
    An 09
    Anh 3
    Anh 5
    Anh 9
    Anh 9 $F$8
    An 06$F$2
    An 09$F$5
    An 03
    An 09$F$5
    An 05
     
  4. hungnm_ta

    hungnm_ta Thành viên mới

    Các bạn dùng Macro lằng nhằng lắm, hãy dùng luôn tiện các hàm của Excel ấy:
    1. B1: Sắp xếp Data cột theo thứ tự.
    2. B2: Dùng hàm Exact là Ok
    Ví dụ:

    ABHungTRUEHungFALSELanFALSETuanFALSE
    Khi đó Tru là trùng dữ liệu, false là không trùng dữ liệu.
     
  5. sealand

    sealand Thành viên gạo cội

    Giả sử vùng dữ liệu của bạn là a2:a24, bạn dung condition format với công thức
    =COUNTIF($A$2:$A$32,A24)>1 (Cho đổi màu nền đỏ chẳng hạn)
    Nếu dữ liệu trùng sẽ chuyển nền đỏ và lọc theo số đó là được
     
  6. laianhtu

    laianhtu Thành viên tiêu biểu

    Chào bạn,

    Đoạn code này hay đấy nhưng mà mình muốn mở rộng vùng dữ liệu đến dòng cuối cùng 65536 thì phải sửa đoạn code làm sao ? nếu được viết thêm đoạn code thì trích dữ liệu trùng qua một sheet mới luôn được không vậy bạn ?

    Thanks.
    Anh Tú.
    "Love is beautiful when it's unconclusive".

    Ngyên văn bên dưới:
    ___________________________________________________________________________
    bạn tự sửa lại đoạn code này từ tô màu đỏ cho những ô có giá trị giống nhau sang hiển thị thông báo msgbox như bạn cần nhé
    Tập tin đính kèm [​IMG] TestForDups1.zip (9.5 KB, 14 lần tải)
     
  7. hoangdanh282vn

    hoangdanh282vn Nguyễn Cảnh Hoàng Danh Staff Member

    Mình làm code này. Bạn bôi đen vùng muốn kiểm tra. Ấn nút. Những ô bị trùng sẽ bị tô màu đỏ.
    PHP:
    Sub KiemtraDulieutrung()
    Dim cell As Range
    For Each cell In Selection
        
    If WorksheetFunction.CountIf(Selectioncell) > 1 Then cell.Interior.ColorIndex 3
    Next
    End Sub
    Trong file đính kèm mình có minh họa thêm cách dùng bằng công thức kết hợp với CF. Bạn tham khảo nha.
     

    Các file đính kèm:

  8. thanhnhanubnd

    thanhnhanubnd Thành viên hoạt động

    Ý mình là thế này : Tìm trên toàn bộ cột nào đó, nếu có số trùng thì ko cần bôi đỏ mà chỉ cần hiện mgsbox :
    1. Đếm xem có bao nhiêu số trùng nhau.
    2. Các số đó là số nào.

    ví dụ : 1,2,1,4,5,6,2,5,7 -->

    Có 3 số trùng nhau, đó là : 1,2,5.

    Thank
     
  9. mythuat4p

    mythuat4p Thành viên chính thức

    Mọi người thích dungf marco nhỉ. Lợi thế của Marco là gì vậy ?
     
  10. hoangdanh282vn

    hoangdanh282vn Nguyễn Cảnh Hoàng Danh Staff Member

    Bạn bôi đen vùng cần kiểm tra và bấm nút :
    PHP:
    Sub KiemtraDulieutrung2()
    Dim cell As RangeStr As Stringcount As Long
    Str 
    "-"
    For Each cell In Selection
        
    If WorksheetFunction.CountIf(Selectioncell) > And InStr(1Strcell) = 0 Then
            count 
    count 1
            Str 
    Str cell "-"
        
    End If
    Next
    MsgBox 
    "Co " count " so bi trung. Cac so do la :" Chr(10) & Str
    End Sub
     

    Các file đính kèm:

  11. hoangdanh282vn

    hoangdanh282vn Nguyễn Cảnh Hoàng Danh Staff Member

    Có chứ bạn. Con chuột đặt tại ô A1. bạn thử gõ công thức sau thử xem :
    =A1*2+B1
    Cái này VBA làm được đó. Hay không bạn!
     
  12. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Danh cải tiến lại. cho 1 InputBox và chỉ cần đặt con trỏ vào 1 cell nào đó trong vùng là được rồi ---> Đôi khi vùng dử liệu lớn quá, việc quét chọn bằng tay cũng khá khó khăn!
     
  13. thanhnhanubnd

    thanhnhanubnd Thành viên hoạt động

    Đúng rồi, nhờ bạn HoangDanh hiệu chỉnh : ta chọn ô A1 là có thể kiểm tra toàn bộ dữ liệu ở cột F ( Bao gồm dữ liệu số, lẫn chữ).Thank.
     
  14. laianhtu

    laianhtu Thành viên tiêu biểu

    Cám ơn bạn Danh,

    Nhưng mà mình nhập dữ liệu đến dòng cuối cùng, dòng số 65536 thì chương trình tìm lâu quá, mất 15 -20 phút mới tìm ra được, có cách nào nhanh hơn nữa không ?

    Thanks.
    Anh Tú.
    "Love is beautiful when it's unconclusive".
     
  15. tri_0988176716

    tri_0988176716 Thành viên mới

  16. tri_0988176716

    tri_0988176716 Thành viên mới

  17. vinhcao2987

    vinhcao2987 Thành viên mới

    chào bạn,code này bạn có thể phát triển them là tính số lần trùng nhau của từng dữ liệu được ko?được thì giúp minh với
     
  18. thanhlanh

    thanhlanh Thành viên tích cực

    Sửa của Hoàng Danh lại giùm Bạn nè:
    Bôi đen dữ liệu xong chạy code này:
    Mã:
    Sub DemDulieutrung()
    Dim cell As Range, Str As String
    Dim n As Long
    Str = ""
    For Each cell In Selection
        n = WorksheetFunction.CountIf(Selection, cell)
        If n > 1 And InStr(1, Str, cell) = 0 Then Str = Str & cell & " trung: " & n & " lan " & Chr(10)
    Next
    MsgBox Str
     End Sub
     
  19. tuanhai601

    tuanhai601 Thành viên mới

    Cám ơn bạn. Đang cần đoạn code này -\\/.
     
  20. cpo_vn

    cpo_vn Thành viên mới

    CF không dùng được cho trường hợp này ah các bác? Em không biết dùng Macro nên chẳng hiểu gì mà bây giờ vùng dữ liệu bên em lớn quá không biết kiểm tra kiểu gì. :(
     

Chia sẻ trang này