[Help] VBA So sánh 02 danh sách và tìm ra Project bị thiếu

Liên hệ QC

robinhsoon

Thành viên hoạt động
Tham gia
19/1/16
Bài viết
153
Được thích
11
Thân chào cả nhà GPEX!

Mong cả nhà giúp em một việc ạ.
Hiện tại em có 1 File data gồm 02 Sheet ("Danh sach" và "Data"). Em muốn so sánh giữa Cột A - Sheet "Danh sách" và Cột W - Sheet "Data", Những Project nào bên Sheet Data có mà Sheet Danh sách không có. Xuất ra giá trị ở cột C sheet "Danh Sách".. Ngược lại nếu không bị Missing thì Xuất thông báo "OK".

Mong cả nhà giúp đỡ ạ.. Em chân thành cảm ơn.
 

File đính kèm

Thân chào cả nhà GPEX!

Mong cả nhà giúp em một việc ạ.
Hiện tại em có 1 File data gồm 02 Sheet ("Danh sach" và "Data"). Em muốn so sánh giữa Cột A - Sheet "Danh sách" và Cột W - Sheet "Data", Những Project nào bên Sheet Data có mà Sheet Danh sách không có. Xuất ra giá trị ở cột C sheet "Danh Sách".. Ngược lại nếu không bị Missing thì Xuất thông báo "OK".

Mong cả nhà giúp đỡ ạ.. Em chân thành cảm ơn.
sao bạn k dùng công thức? countif là được mà
 
Upvote 0
Thân chào cả nhà GPEX!

Mong cả nhà giúp em một việc ạ.
Hiện tại em có 1 File data gồm 02 Sheet ("Danh sach" và "Data"). Em muốn so sánh giữa Cột A - Sheet "Danh sách" và Cột W - Sheet "Data", Những Project nào bên Sheet Data có mà Sheet Danh sách không có. Xuất ra giá trị ở cột C sheet "Danh Sách".. Ngược lại nếu không bị Missing thì Xuất thông báo "OK".

Mong cả nhà giúp đỡ ạ.. Em chân thành cảm ơn.

Bạn thử chạy code dưới xem có đúng không ạ:
Mã:
Option Explicit

Public Sub SoSanh()
    Dim Dic As Object, Ws As Worksheet, sArr(), dArr(), rng As Range
    Dim I As Long, K As Long, R As Long, EndR As Long, Txt As String
        
    With Sheets("Data")
        EndR = .Range("W100000").End(xlUp).Row
        If EndR = 1 Then Exit Sub
        Set Dic = CreateObject("Scripting.Dictionary")
        sArr = .Range("W2:W" & EndR).Value
        R = UBound(sArr)
        For I = 2 To R
            Txt = sArr(I, 1)
            If Not Dic.Exists(Txt) Then Dic.Item(Txt) = ""
        Next I
    End With
    
    With Sheets("Danh sach")
        EndR = .Range("A10000").End(xlUp).Row
        If EndR = 1 Then GoTo End_
            sArr = .Range("A2", .Range("A" & EndR + 1)).Value
            R = UBound(sArr)
            ReDim dArr(1 To R, 1 To 1)
            For I = 1 To R
                If sArr(I, 1) <> Empty Then
                    Txt = sArr(I, 1)
                    If Dic.Exists(Txt) Then
                        dArr(I, 1) = ""
                    Else
                        dArr(I, 1) = Txt
                    End If
                End If
            Next I
        Set rng = .Range("D2")
        With rng
            .Resize(R) = dArr
            .Resize(R).Sort rng, xlAscending
        End With
    End With
End_:
    Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử chạy code dưới xem có đúng không ạ:
Mã:
Option Explicit

Public Sub SoSanh()
    Dim Dic As Object, Ws As Worksheet, sArr(), dArr(), rng As Range
    Dim I As Long, K As Long, R As Long, EndR As Long, Txt As String
       
    With Sheets("Data")
        EndR = .Range("W100000").End(xlUp).Row
        If EndR = 1 Then Exit Sub
        Set Dic = CreateObject("Scripting.Dictionary")
        sArr = .Range("W2:W" & EndR).Value
        R = UBound(sArr)
        For I = 2 To R
            Txt = sArr(I, 1)
            If Not Dic.Exists(Txt) Then Dic.Item(Txt) = ""
        Next I
    End With
   
    With Sheets("Danh sach")
        EndR = .Range("A10000").End(xlUp).Row
        If EndR = 1 Then GoTo End_
            sArr = .Range("A2", .Range("A" & EndR + 1)).Value
            R = UBound(sArr)
            ReDim dArr(1 To R, 1 To 1)
            For I = 1 To R
                If sArr(I, 1) <> Empty Then
                    Txt = sArr(I, 1)
                    If Dic.Exists(Txt) Then
                        dArr(I, 1) = ""
                    Else
                        dArr(I, 1) = Txt
                    End If
                End If
            Next I
        Set rng = .Range("D2")
        With rng
            .Resize(R) = dArr
            .Resize(R).Sort rng, xlAscending
        End With
    End With
End_:
    Set Dic = Nothing
End Sub
Cảm ơn Chị đã giúp đỡ ạ, nhưng code này không hoạt động ạ.. Khi em thay đổi giá trị.. Chẳng hạn là em để cho 02 danh sách giống nhau, khi chạy ra nó vẫn hiện ra project lỗi..
Bài đã được tự động gộp:

sao bạn k dùng công thức? countif là được mà
Cảm ơn Anh ạ, hiện em muốn dùng VBA để thao tác cho các File, nên em không dùng countif ạ.
 
Upvote 0
Cảm ơn Chị đã giúp đỡ ạ, nhưng code này không hoạt động ạ.. Khi em thay đổi giá trị.. Chẳng hạn là em để cho 02 danh sách giống nhau, khi chạy ra nó vẫn hiện ra project lỗi..
Bài đã được tự động gộp:


Cảm ơn Anh ạ, hiện em muốn dùng VBA để thao tác cho các File, nên em không dùng countif ạ.

Có thể do OT đang để:
Mã:
Set rng = .Range("D2")
Nên C2:C3 vẫn còn kết quả.
Bạn thử sửa thành:
Mã:
Set rng = .Range("C2")
Xem được không ạ?
 
Upvote 0
Có thể do OT đang để:
Mã:
Set rng = .Range("D2")
Nên C2:C3 vẫn còn kết quả.
Bạn thử sửa thành:
Mã:
Set rng = .Range("C2")
Xem được không ạ?
Em đã sửa lại rồi ạ, nhưng lần này kết quả vẫn sai ạ.. ví dụ: Project 377366 của cả 02 danh sách đều có, nhưng tool lại báo missing ạ.
Em có đính kèm File ạ
 

File đính kèm

Upvote 0
Em đã sửa lại rồi ạ, nhưng lần này kết quả vẫn sai ạ.. ví dụ: Project 377366 của cả 02 danh sách đều có, nhưng tool lại báo missing ạ.
Em có đính kèm File ạ

Xin lỗi nhờ bạn sửa giúp chỗ:
Mã:
For I = 2 To R
            Txt = sArr(I, 1)

thành:
Mã:
For I = 1 To R
            Txt = sArr(I, 1)
 
Upvote 0
Web KT

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

Back
Top Bottom