Đối chiếu 2 bảng dữ liệu bằng ngôn ngữ VBA

Liên hệ QC

tdnhandno

Thành viên mới
Tham gia
10/3/16
Bài viết
47
Được thích
1
e muốn đối chiếu 2 bảng dữ liệu Số báo cáo (Sau đây e gọi là bảng A) và Số hệ thống (Sau đây e gọi là bảng B)

cách đối chiếu là:
- lấy từng dòng của bảng A đối chiếu xem có trong bảng B hay không và xuất kết quả là ở cột Kết quả. Nếu không có báo "không có"
- Ngược lại lấy từng dòng của Bảng B đối chiếu so với bảng A và xuất ra kết quả.
Mong mọi người giúp đỡ.
E cám ơn mọi người nhiều ạ
 

File đính kèm

Cái này chắc không cần VBA đâu, chỉ cần ifferror(vlookup(....),"Không có") là được
 
Upvote 0
e muốn đối chiếu 2 bảng dữ liệu Số báo cáo (Sau đây e gọi là bảng A) và Số hệ thống (Sau đây e gọi là bảng B)

cách đối chiếu là:
- lấy từng dòng của bảng A đối chiếu xem có trong bảng B hay không và xuất kết quả là ở cột Kết quả. Nếu không có báo "không có"
- Ngược lại lấy từng dòng của Bảng B đối chiếu so với bảng A và xuất ra kết quả.
Mong mọi người giúp đỡ.
E cám ơn mọi người nhiều ạ
Nếu đơn giản là dò "có hay không" thì CountIfs() cũng xong.
Nhưng nếu bảng A có 1 dòng cùng Ngày và Số tiền, Bảng B có hơn 1 dòng cùng Ngày và Số tiền đó thì sao?
 
Lần chỉnh sửa cuối:
Upvote 0
e muốn đối chiếu 2 bảng dữ liệu Số báo cáo (Sau đây e gọi là bảng A) và Số hệ thống (Sau đây e gọi là bảng B)

cách đối chiếu là:
- lấy từng dòng của bảng A đối chiếu xem có trong bảng B hay không và xuất kết quả là ở cột Kết quả. Nếu không có báo "không có"
- Ngược lại lấy từng dòng của Bảng B đối chiếu so với bảng A và xuất ra kết quả.
Mong mọi người giúp đỡ.
E cám ơn mọi người nhiều ạ
Bạn thử cái sub này nhé.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub
 
Upvote 0
Muốn chuyên nghiệp thì tự học rồi tự viết và nắm vững công nghệ. Chứ ai đời đi nhờ giúp...xong mai này nó hư hay cần thay đổi gì đó...thì sự chuyên nghiệp lại được đưa lên GPE hả bạn?

Ngộ nhỉ???
Chắc là bạn đó muốn xin code xong học theo code để viết vào bài của mình.Vì em thấy dữ liệu đưa lên vào cùng 1 sheets như thế này là file mẫu rồi.Chứ nếu mà file thực tế nó khác với dữ liệu nhiều nên không muốn dùng công thức.Hihi.Đây là ý kiến riêng em nhé.
 
Upvote 0
Chắc là bạn đó muốn xin code xong học theo code để viết vào bài của mình.Vì em thấy dữ liệu đưa lên vào cùng 1 sheets như thế này là file mẫu rồi.Chứ nếu mà file thực tế nó khác với dữ liệu nhiều nên không muốn dùng công thức.Hihi.Đây là ý kiến riêng em nhé.
e chỉ đang học về ngôn ngữ VBA và muốn hiểu thêm thôi ạ. Chứ ko phải là e đi lấy code này code kia về để sử dụng gì đâu. e cũng chạy được 1 chiều là bảng A so với bảng B, muốn ngược lại thì 2 chuyển qua Sheet khác. nên e muốn làm 1 sheet cho ngắn gọn. nên viết bài hỏi, và so sánh xem như thế nào thôi. Cám ơn mọi người đã góp ý
 
Upvote 0
e chỉ đang học về ngôn ngữ VBA và muốn hiểu thêm thôi ạ. Chứ ko phải là e đi lấy code này code kia về để sử dụng gì đâu. e cũng chạy được 1 chiều là bảng A so với bảng B, muốn ngược lại thì 2 chuyển qua Sheet khác. nên e muốn làm 1 sheet cho ngắn gọn. nên viết bài hỏi, và so sánh xem như thế nào thôi. Cám ơn mọi người đã góp ý
Vậy bạn xem code bài 4 đó.
 
Upvote 0
Bạn thử cái sub này nhé.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub

cám ơn a rất nhiều ạ. e đã làm được rồi. cám ơn a lần nữa ^_^
Bài đã được tự động gộp:

Vậy bạn xem code bài 4 đó.
dạ, e đã xem và thực hiện thành công rồi ạ.
 
Upvote 0
Bạn thử cái sub này nhé.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub

nếu mà 2 bảng dữ liệu A và B ko cần bằng, tức là 1 trong 2 bảng có nhiều hơn số dòng. thì mình làm như thế nào hả a. e đã test thử trường hợp ko cân bằng. Nó báo lỗi " Run-time error 9..."
 
Upvote 0
nếu mà 2 bảng dữ liệu A và B ko cần bằng, tức là 1 trong 2 bảng có nhiều hơn số dòng. thì mình làm như thế nào hả a. e đã test thử trường hợp ko cân bằng. Nó báo lỗi " Run-time error 9..."
Bạn sửa lại nhé.Mình bị lỗi 1 chỗ.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr1, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub
 
Upvote 0
Bạn sửa lại nhé.Mình bị lỗi 1 chỗ.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr1, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub
Dạ, e cám ơn a rất nhiều ạ. e đã test thử chưa phát hiện ra lỗi j thêm hihi. Cám ơn a 1 lần nữa ạ ^_^
 
Upvote 0
Bạn sửa lại nhé.Mình bị lỗi 1 chỗ.
Mã:
Sub doichieu()
    Dim arr, i As Long, dic As Object, lr As Long, lr1 As Long, arr1, dk As String, dks As String
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A5:C" & lr).Value2
        lr1 = .Range("I" & Rows.Count).End(xlUp).Row
        arr1 = .Range("I5:K" & lr1).Value2
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B1"
            If Not dic.exists(dk) Then
               dic.Add dk, ""
            End If
        Next i
        For i = 1 To UBound(arr1, 1)
            dks = arr1(i, 1) & "#" & arr1(i, 2) & "B1"
            dk = arr1(i, 1) & "#" & arr1(i, 2) & "B2"
            dic.Item(dk) = i
            If Not dic.exists(dks) Then
               arr1(i, 3) = "Khong co"
            End If
        Next i
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 2) & "B2"
            If Not dic.exists(dk) Then
               arr(i, 3) = "khong co"
            End If
        Next i
        .Range("A5:C" & lr).Value = arr
        .Range("I5:K" & lr1).Value = arr1
    End With
End Sub
Nếu e muốn xuất hàng báo không có qua 1 sheet khác (gọi là sheet tổng hợp đi ạ), thì mình làm như thế nào ngoài cách Advanced Filter vậy hả a. tại làm cách Advanced nó không tự động, mà mỗi lần xuất phải làm thủ công lại 1 lần ạ
 
Upvote 0
Web KT

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

Back
Top Bottom