• So sánh dữ liệu khi tạo sheet mới
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 31-12-16, 11:10 AM

    hịc. file này nói đúng hơn là phần mềm .
    file này do người khác làm, bạn hỏi cách thức update mình cũng không nắm rõ lắm, mình chỉ biết được logic là sử dụng 1 file AddIn làm file trung gian kết nối tới server , người sử dụng cần sử dụng thì có 1 file template (2 file này được viết code sẵn rồi) người sử dụng chỉ làm thông tin của mã hàng và tính định mức (sheet(n)).
    sau đó khi nhấp vào sheet1 thì sẽ tự động update thông tin sheet(n) qua sheet1. và mình biết sheet1 có sử dụng nhiều sự kiện
    workbook_beforeSave,sheetChange,... 
    nói như thế chắc cũng khó cho bạn 004 . access có thể  nghiên cứu được có excel mù tịc  030
    mình có làm thử như vầy:

    Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)


        'If Target.Column = 9 Then
            'If Application.CountIf(Columns(9), Target) > 1 Then
            '//If duplicate found notify user
            'MsgBox "Duplicate StyleNo, Please check again !", vbCritical
            'End If
        'End If
        getwschange sh, Target
    End Sub
    kết quả chỉ thông báo được khi sheet1 có 2 mã giống nhau(tức là được update rồi)
  • RE: So sánh dữ liệu khi tạo sheet mới

    ongke0711 > 31-12-16, 12:18 PM

    Tôi nghĩ cái logic xử lý là: Khi click vào sheet 1, nó sẽ gọi hàm kiểm tra với sheet 2 xem có trùng không, nếu có thì không chạy lệnh update (đã có code sẳn trên file của bạn). Và cứ dùng vòng lặp để Loop qua tất cả các sheet 3,4 ..n trong workbook (trừ sheet1).
    - Tạo 1 Sub FindDublicate, gọi Sub này khi click vào Sheet1.
    - Bạn tự nghiên cứu tiếp vụ Loop qua các sheet nhé.

    Mã PHP:
    Private Sub Worksheet_Activate()
       Call FindDublicate
    End Sub

    Sub FindDublicate
    ()
       Dim rng1rng2cell1cell2 As Range
       Set rng1 
    Worksheets("Sheet1").Range("I2:I100")
       Set rng2 Worksheets("Sheet2").Range("I2:I100")
       For Each cell1 In rng1
           For Each cell2 In rng2
               If IsEmpty
    (cell2Then Exit For
               If cell1.Value cell2.Value Then
                   cell1
    .Font.Bold True
                   cell1
    .Interior.ColorIndex 3
                   cell1
    .Interior.Pattern xlSolid
                   cell2
    .Font.Bold True
                   cell2
    .Interior.ColorIndex 3
                   cell2
    .Interior.Pattern xlSolid
                   MsgBox 
    "Duplicate StyleNo " cell1 " , Please check again !"vbCritical
               End 
    If
           Next cell2
       Next cell1
    End Sub 
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 31-12-16, 03:18 PM

    cảm ơn Ongke nhiệt tình giúp đỡ. sẽ báo kết quả cho Ongke biết
    chúc Ongke năm mới nhiều sức khỏe và nhiều niềm vui !

    Thân
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 05-01-17, 03:24 PM

    1.code của bạn mình đã xem và áp dụng thử thì chỉ được 2 sheet và chưa tìm được cách so sánh nhiều sheet ngẫu nhiên có dữ liệu trùng. ví dụ mình có 20sheet thì việc so sánh như thế nào .
    2.với mình muốn tô màu nguyên dòng khi tìm được dữ liều trùng thì có thể được không (cái này tìm đến chóng mặt mắc ói luôn mà cũng không thấy 030  )?
    thanks !
  • RE: So sánh dữ liệu khi tạo sheet mới

    hieuvn > 05-01-17, 04:13 PM

    (05-01-17, 03:24 PM)jason Đã viết: 1.code của bạn mình đã xem và áp dụng thử thì chỉ được 2 sheet và chưa tìm được cách so sánh nhiều sheet ngẫu nhiên có dữ liệu trùng. ví dụ mình có 20sheet thì việc so sánh như thế nào .
    2.với mình muốn tô màu nguyên dòng khi tìm được dữ liều trùng thì có thể được không (cái này tìm đến chóng mặt mắc ói luôn mà cũng không thấy 030  )?
    thanks !
    haha đã theo cách này thì theo ngu ý của mình cứ đổ data của tất cả các sheet vào sheet 1 rồi filter 1 lần trước khi update lên server. Mình tò mò xíu server dùng SQL server hay là loại khác?
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 05-01-17, 04:59 PM

    (05-01-17, 04:13 PM)hieuvn Đã viết: haha đã theo cách này thì theo ngu ý của mình cứ đổ data của tất cả các sheet vào sheet 1 rồi filter 1 lần trước khi update lên server. Mình tò mò xíu server dùng SQL server hay là loại khác?

    server dùng SQL nha hieuvn
    vâng đổ tất cả các sheet thì code sẵn đã làm rồi, vấn đề là những sheet khác (vd sheet2 và sheet3 giống có styleNo thì sẽ báo lỗi không cho đô vào sheet1). vấn đề này khó quá đối với mình.
    nên mình đã chọn phương án khác là kiểm tra tren sheet1 thôi nếu có trùng thì báo lỗi, mình đã làm được cái này nhưng muốn khi tìm được thì nguyên dòng có dữ liệu trùng được tô màu . không bt có được không ?
    mình share code dưới anh cần thì sài nhé
    Mã PHP:
    Private Sub Worksheet_Activate()
       Call FindDuplicate
     End Sub

    Sub FindDuplicate
    ()

        Dim ws As Worksheet
        Dim cell 
    As Range
        Dim myrng 
    As Range
        Dim clr 
    As Long
        Dim lastcell 
    As Range
        Dim i 
    As Long
        Dim lastrow 
    As Long

        Set ws 
    ThisWorkbook.ActiveSheet
        Set myrng 
    ws.Range("i2:i" Range("i" ws.Rows.Count).End(xlUp).Row)
     
        With myrng
            Set lastcell 
    = .Cells(.Cells.Count)
        End With    
        myrng
    .Interior.ColorIndex xlNone  
        clr 
    3
        
    For Each cell In myrng
               If Application
    .WorksheetFunction.CountIf(myrngcell) > 1 Then
                    If myrng
    .Find(what:=celllookat:=xlWholeMatchCase:=Falseafter:=lastcell).Address cell.Address Then                
                         cell
    .Interior.ColorIndex clr
                         clr 
    clr 1
                         i 
    1
                     Else               
                          cell
    .Interior.ColorIndex myrng.Find(what:=celllookat:=xlWholeMatchCase:=Falseafter:=lastcell).Interior.ColorIndex
                End 
    If
            End If
        Next
        
        
    If 0 Then    
            MsgBox 
    "Found " " STYLE NO had duplicate. Please check again !"vbCritical
        
    Else
            Exit Sub
        End 
    If
        
    End Sub 
    code này mình tìm trên mạng và tùy biến thêm tác giả quên mất luôn rồi. kết quả ok rồi nhưng chỉ nhuộm được ô có trùng thôi không nhuộm được nguyên dòng 
    bạn biết giúp mình nhé
    thanks
  • RE: So sánh dữ liệu khi tạo sheet mới

    ongke0711 > 05-01-17, 05:17 PM

    Ý bạn hieuvn là ko quan tâm các sheet có trùng hay không, cứ đổ về sheet 1 hết rồi mới xử lý riêng sheet 1, tìm row trùng rồi xoá nó. Làm vậy ko đc à?
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 05-01-17, 05:51 PM

    hi Ongke ,
    không xóa được nha bạn. tại vì khi nhấp vào sheet1 thì sẽ tự động đổ các sheet qua sheet1, nếu xóa thì xóa sheet khác mới không đổ về sheet1.
    hiện tại mình bỏ qua cái đó luôn rồi (nếu bạn nào có cách mình vẫn muốn được học hỏi thêm), mình đang xử lý trên sheet1 như code ở trên, còn vướng cái tô màu nguyên dòng thôi.
    bạn biết giúp mình nhé
    thanks
  • RE: So sánh dữ liệu khi tạo sheet mới

    ongke0711 > 06-01-17, 12:09 AM

    Muốn tô màu nguyên dòng thì bạn đổi dòng code:
    cell.Interior.ColorIndex = clr  ==> cell.EntireRow.Interior.ColorIndex = clr
  • RE: So sánh dữ liệu khi tạo sheet mới

    jason > 06-01-17, 08:50 AM

    (06-01-17, 12:09 AM)ongke0711 Đã viết: Muốn tô màu nguyên dòng thì bạn đổi dòng code:
    cell.Interior.ColorIndex = clr  ==> cell.EntireRow.Interior.ColorIndex = clr

    mình áp dụng ok rồi
    cảm ơn Ongke nhiều 
    chúc ngày mới vui vẻ