So sánh dữ liệu giữa hai sheet

Liên hệ QC

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,187
Được thích
105
Em có hai sheet 12. Em muốn căn cứ vào dữ liệu cần so sánh ở sheet 1 để so sánh với sheet 2 để lấy ra dữ liệu khác biệt. Sau đó đổ dữ liệu đó vào đúng ngày trong sheet Tong hop, bao gồm nội dung ID và nội dung khác biệt. Cụ thể anh chị xem trong sheet đính kèm em có minh họa rõ kết quả cần đạt được nhé.

Em nghĩ ra cách dùng vòng lặp duyệt các ngày của hai sheet, sau đó so sánh dữ liệu ID sheet 1 với ID sheet 2. Nếu khác nhau thì ghi kết quả khác nhau đó vào sheet Tong hop. Nhưng thấy dùng vòng lặp như thế thì cũng chuối vì cứ mỗi ID trong sheet 1 lại so sánh với toàn bộ ID của sheet 2 để xem ID nào trùng mới đối chiếu tiếp dữ liệu ở ngày tương ứng. Như vậy cách này hơi chuối.
Em cảm ơn!

P/s: Em update lại file nhé.
 

File đính kèm

  • So sanh hai sheet.xlsx
    11.1 KB · Đọc: 7
Lần chỉnh sửa cuối:
Em có hai sheet 12. Em muốn căn cứ vào dữ liệu cần so sánh ở sheet 1 để so sánh với sheet 2 để lấy ra dữ liệu khác biệt. Sau đó đổ dữ liệu đó vào đúng ngày trong sheet Tong hop, bao gồm nội dung ID và nội dung khác biệt. Cụ thể anh chị xem trong sheet đính kèm em có minh họa rõ kết quả cần đạt được nhé.

Em nghĩ ra cách dùng vòng lặp duyệt các ngày của hai sheet, sau đó so sánh dữ liệu ID sheet 1 với ID sheet 2. Nếu khác nhau thì ghi kết quả khác nhau đó vào sheet Tong hop. Nhưng thấy dùng vòng lặp như thế thì cũng chuối vì cứ mỗi ID trong sheet 1 lại so sánh với toàn bộ ID của sheet 2 để xem ID nào trùng mới đối chiếu tiếp dữ liệu ở ngày tương ứng. Như vậy cách này hơi chuối.
Em cảm ơn!
Theo bạn "dữ liệu khác biệt" là như thế nào?+-+-+-++-+-+-++-+-+-+
 
Upvote 0
Ở sheet 1 luôn luôn chỉ có giá trị BH.
Mục tiêu là so sánh ID và ngày tương ứng với tiêu chí như sau:
So sánh các giá trị BH trong sheet 1 với sheet 2. Nếu Sheet 1 và sheet 2 đều là BH thì bỏ qua. Trường hợp nếu sheet 2 chứa giá trị khác BH thì đổ giá trị BH vào ô tổng hợp. (Khác ở đây là có thể khác "BH", hoặc có thể bên sheet 2 không tồn tại ID cần so sánh của sheet 1)

Mục đích của bài này là vì hàng tuần con bé phòng em gửi cho em dữ liệu bảo hiểm, để em update vào file tổng hợp các loại nghỉ (Nghỉ bảo hiểm BH, nghỉ phép P...) của em. Nhưng file nó gửi em cũng là file tổng hợp của các ngày trước đó và có thể có chỉnh sửa cho nên em muốn so sánh sự khác biệt giữa file tổng và file em nhập, cái nào khác thì em bổ sung ưu tiên theo file của em nó.
 
Lần chỉnh sửa cuối:
Upvote 0
Có ai hiểu điều em diễn đạt không ? :(
 
Upvote 0
Mình cũng thử làm. Nhưng số liệu khác Sheet("kết qua"). Hì hì

Ô xin lỗi mọi người mình up nhầm file. Mình up lại file mới nhé. Với Kết quả mới này thì chắc là ổn. Cái khác của bạn có khi đúng ý mình đó, bạn up mình xem thử nhé :)

Đầu óc rối bù quá, mình xin diễn đạt lại như sau: Từ giá trị BH của ID và ngày cần so sánh tại sheet 1 so sánh với sheet 2. Nếu sheet 2 có BH rồi thì bỏ qua, nếu chưa có thì đổ kết quả BH vào sheet Tong hop.
 

File đính kèm

  • So sanh hai sheet.xlsx
    10.7 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Ô xin lỗi mọi người mình up nhầm file. Mình up lại file mới nhé. Với Kết quả mới này thì chắc là ổn. Cái khác của bạn có khi đúng ý mình đó, bạn up mình xem thử nhé :)

Đầu óc rối bù quá, mình xin diễn đạt lại như sau: Từ giá trị BH của ID và ngày cần so sánh tại sheet 1 so sánh với sheet 2. Nếu sheet 2 có BH rồi thì bỏ qua, nếu chưa có thì đổ kết quả BH vào sheet Tong hop.
Cái ày mình căn vào Sheets("Ket qua") để làm thôi nha. Không có đúng vời dữ liệu khác không nữa
 

File đính kèm

  • So sanh hai sheet (1).xls
    68.5 KB · Đọc: 26
Upvote 0
Cái ày mình căn vào Sheets("Ket qua") để làm thôi nha. Không có đúng vời dữ liệu khác không nữa
Đúng cái mình đang cần. Cảm ơn bạn rất nhiều!!!

Giải pháp tổng quát (mình đang lo là cột hai sheet khác nhau mà file gửi lên các cột đều tương ứng. Thử insert thêm cột thì vẫn cho kết quả đúng. Nhìn cái Function chắc rất lâu nữa mới có thể hiểu.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái ày mình căn vào Sheets("Ket qua") để làm thôi nha. Không có đúng vời dữ liệu khác không nữa
Bạn ơi cho mình hỏi

PHP:
Function LastRange(ByVal Vungtieude As Range, Choose As Long) As Long
    Dim Rng As Range, Ic As Long, J As Long, Jc As Long, N As Long
J = Vungtieude.Column: Jc = J + Vungtieude.Columns.Count - 1: I = Rows.Count
Set Rng = Range(Cells(1, J), Cells(I, Jc))
On Error Resume Next
If Choose = 1 Then
    N = Rng.Find(What:="*", _
            After:=Rng.Cells(1), _
            LookAt:=xlByRows, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
End If
If Choose = 2 Then
    N = Rng.Find(What:="*", _
            After:=Rng.Cells(1), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByColumns, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Column
End If
If N Then
    LastRange = N
Else
    LastRange = 1
End If

Function này dùng để làm gì? Vì mình xóa đi thì vẫn thấy kết quả như ý muốn.
 
Upvote 0
Bạn ơi cho mình hỏi

PHP:
Function LastRange(ByVal Vungtieude As Range, Choose As Long) As Long
    Dim Rng As Range, Ic As Long, J As Long, Jc As Long, N As Long
J = Vungtieude.Column: Jc = J + Vungtieude.Columns.Count - 1: I = Rows.Count
Set Rng = Range(Cells(1, J), Cells(I, Jc))
On Error Resume Next
If Choose = 1 Then
    N = Rng.Find(What:="*", _
            After:=Rng.Cells(1), _
            LookAt:=xlByRows, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
End If
If Choose = 2 Then
    N = Rng.Find(What:="*", _
            After:=Rng.Cells(1), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByColumns, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Column
End If
If N Then
    LastRange = N
Else
    LastRange = 1
End If

Function này dùng để làm gì? Vì mình xóa đi thì vẫn thấy kết quả như ý muốn.
Cái hàm đó để các định dòng cuối và cột cuối trong vùng dữ liệu. Nó không tham gia vào Code bài này đâu. Hôm trước mình định dùng nhưng không thành công mà quên chưa xóa đi. :D
 
Upvote 0
Cái hàm đó để các định dòng cuối và cột cuối trong vùng dữ liệu. Nó không tham gia vào Code bài này đâu. Hôm trước mình định dùng nhưng không thành công mà quên chưa xóa đi. :D

Nhìn code của bạn đau hết cả đầu :(. Đã chót thì chét. Bạn xem mình file này nhé. Từ sheet BCC, kết xuất dữ liệu theo cột ID của sheet DS, BCC có gì thì đổ nguyên vào DS với các ID đã chỉ định trong sheet DS.

Hoặc có thể lý giải cách hoạt động của code của bạn được không? Mình chỉ hiểu mấy cái đơn giản còn cách thức hoạt động của Dic, Item mình không hiểu mặc dù đã đọc không biết bao nhiêu lần chủ đề về Dictionary :(. Mình nghĩ nếu hiểu cái này thì có thể làm được cái file mình đính kèm.
PHP:
Public Sub Tonghop_dulieu()
    Dim Dic As Object, Tem As String, Dk As Boolean
    Dim sArr(), dArr(), tArr(), I As Long, J As Long, R As Long
    Dim R1 As Long, R2 As Long, R3 As Long, C1 As Long, C2 As Long, C3 As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("2")
    C1 = .Range("IV1").End(1).Column: C3 = C1 'Xác định vị trí cột cuối cùng chứa dữ liệu tính từ cột IV
    tArr = .Range("A1", .Range("A65535").End(3)).Resize(, C1).Value  'Tạo mảng tArr
End With
For I = 2 To UBound(tArr)  'Tại vị trí bắt đầu từ dòng 2
    For J = 3 To UBound(tArr, 2) 'và cột 3
        Tem = tArr(I, 1) & "#" & tArr(1, J) & "#" & tArr(I, J) 'Tạo tem là các giá trị giữa ID, ngày nghỉ, lý do nghỉ
        Dic.Item(Tem) = I '???
    Next J
Next I
With Sheets("1")
    C2 = .Range("IV1").End(1).Column: K = 1
    sArr = .Range("A1", .Range("A65535").End(3)).Resize(, C2).Value
    If C2 > C1 Then C3 = C2
    ReDim dArr(1 To UBound(tArr) + UBound(sArr), 1 To C3)
    For I = 2 To UBound(sArr)
        Dk = False
        For J = 3 To C2
            Tem = sArr(I, 1) & "#" & sArr(1, J) & "#" & sArr(I, J)
            R = Dic.Item(Tem)
            If R = 0 Then
                If sArr(I, J) = "BH" Then
                    dArr(K, 1) = sArr(I, 1)
                    dArr(K, 2) = sArr(I, 2)
                    dArr(K, J) = sArr(I, J)
                    Dk = True
                End If
            End If
            If Dk = True And J = C2 Then K = K + 1
        Next J
    Next I
    With Sheets("Ket qua")
        .Range("A2").Resize(5000, C3).ClearContents
        .Range("A2").Resize(K, C2) = dArr
    End With
End With
Set Dic = Nothing
End Sub
 

File đính kèm

  • INNO.xlsx
    873.3 KB · Đọc: 17
Lần chỉnh sửa cuối:
Upvote 0
Không lẻ lấy Cơm đi ăn với lẩu -> Chí ít cũng là Đĩa bún gạo hay Gói mì chứ.??? Đâu phải được voi đòi luôn "Hai Bà Trưng"???
:(( Mình không hiểu lắm. Mình thấy bài ban đầu hình như cái Tem là cái quyết định để so sánh những cái cần so sánh cho nên chắc là áp dụng được với vấn đề thứ 2 của mình. Mình cũng biết ai cũng có công việc riêng nên cũng chỉ dám hỏi được không? thôi chứ có yêu cầu là phải làm cho mình đâu. :((
 
Upvote 0
:(( Mình không hiểu lắm. Mình thấy bài ban đầu hình như cái Tem là cái quyết định để so sánh những cái cần so sánh cho nên chắc là áp dụng được với vấn đề thứ 2 của mình. Mình cũng biết ai cũng có công việc riêng nên cũng chỉ dám hỏi được không? thôi chứ có yêu cầu là phải làm cho mình đâu. :((

Tôi không nói là bạn không được hỏi, nhưng hỏi đúng chỗ. Bạn cần xem lại tiêu đề bài & bài hỏi của bạn ở trên # 11??? Tự cắn đuôi của mình.
 
Upvote 0
Vẫn là bài toán tổng hợp dữ liệu nhưng theo điều kiện khác. Em có sheet N và sheet BH.
Em muốn sheet Tong hop sẽ là toàn bộ dữ liệu sheet N và sheet BH sao cho dữ liệu so sánh nghỉ sẽ ưu tiên lấy bên sheet BH trước. Ví dụ ID đầu tiên 24164 ngày 26 tại sheet N là nghỉ NC, nhưng trong sheet BH đang có giá trị là nghỉ BH thì sẽ ưu tiên lấy giá trị BH. Còn nếu ID nào đó trong sheet BH có nhưng sheet N không có thì add ID và giá trị nghỉ vào sheet Tổng hợp. Mong mọi người chỉ giúp em.

P/s: Dic rất hay nhưng em đọc nhiều không vào, không hiểu hết vấn đề cho nên cứ có thay đổi gì là lại tìm tòi viết không ra. Anh chị nào rảnh có thể dạy em về Dic được không? Em xin được hậu tạ ạ !
 

File đính kèm

  • Tong hop 2 sheet.xlsb
    393.4 KB · Đọc: 2
Upvote 0
Vẫn là bài toán tổng hợp dữ liệu nhưng theo điều kiện khác. Em có sheet N và sheet BH.
Em muốn sheet Tong hop sẽ là toàn bộ dữ liệu sheet N và sheet BH sao cho dữ liệu so sánh nghỉ sẽ ưu tiên lấy bên sheet BH trước. Ví dụ ID đầu tiên 24164 ngày 26 tại sheet N là nghỉ NC, nhưng trong sheet BH đang có giá trị là nghỉ BH thì sẽ ưu tiên lấy giá trị BH. Còn nếu ID nào đó trong sheet BH có nhưng sheet N không có thì add ID và giá trị nghỉ vào sheet Tổng hợp. Mong mọi người chỉ giúp em.

P/s: Dic rất hay nhưng em đọc nhiều không vào, không hiểu hết vấn đề cho nên cứ có thay đổi gì là lại tìm tòi viết không ra. Anh chị nào rảnh có thể dạy em về Dic được không? Em xin được hậu tạ ạ !
Chưa hiểu lắm nhưng cũng làm thí, không đúng thì bạn "la lên" nhé.
 

File đính kèm

  • Tong hop 2 sheet.rar
    254.5 KB · Đọc: 25
Upvote 0
Web KT
Back
Top Bottom