Kiểm tra nhiều cột giống nhau giữa 2 Sheet

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
453
Được thích
18
Em chào mọi người.

Dạ em có 1 file tính toán như đính kèm ạ. nó có 1 khúc mắc như này mà em đang loay hoay không biết làm thế nào cho ngắn gọn ạ

1. Nó sẽ kiểm tra dữ liệu tại 2 sheet "Volumn" và "Cost"... nó kiểm tra từng dòng ở 2 sheet.
2. Nếu dữ liệu tại 2 sheet giống nhau từ cột A đến cột O thì nó sẽ tiếp tục làm bước 3
3. Trong các dòng dữ liệu giống nhau giữa 2 sheet mà nó tìm được. Nó sẽ tiếp tục kiểm tra 5 cột tại 2 sheet này, nếu 5 cột này có dữ liệu giống với dữ liệu tại cột B của sheet "Detail". thì khi đó nó sẽ nhân cột "Q" của 2 sheet "Volumn" và "Cost" lại với nhau và trả kết quả về ô B8 của Sheet "Detail" ạ.

Em xin cảm ơn ạ!
 

File đính kèm

  • File.xlsx
    110.8 KB · Đọc: 7
PHP:
Function compare2RowsOfTable(byval table1 as variant, byval table2 as variant, byval indexRow as long, byval numCols as long ) as boolean
'Trả về:'
'True: Cột A:O của 2 bảng giống nhau'
'False: ngược lại True ở trên. '
'table1, table2 là mảng dữ liệu cột A:O của 2 sheets'
'indexRow: dòng cần đối chiếu của 2 bảng dữ liệu'
'numCols: số cột dữ liệu A:O '
Dim i as long
compare2RowsOfTable = True
For i=1 to numCols
if table1(indexRow, i) <> table2(indexRow, i) then
compare2RowsOfTable = False
exit function
end if
Next i
End function
 
Upvote 0
PHP:
Function compare2RowsOfTable(byval table1 as variant, byval table2 as variant, byval indexRow as long, byval numCols as long ) as boolean
'Trả về:'
'True: Cột A:O của 2 bảng giống nhau'
'False: ngược lại True ở trên. '
'table1, table2 là mảng dữ liệu cột A:O của 2 sheets'
'indexRow: dòng cần đối chiếu của 2 bảng dữ liệu'
'numCols: số cột dữ liệu A:O '
Dim i as long
compare2RowsOfTable = True
For i=1 to numCols
if table1(indexRow, i) <> table2(indexRow, i) then
compare2RowsOfTable = False
exit function
end if
Next i
End function
Dạ em cảm ơn anh.

Cái table1, table2 thì khai báo như thế nào ạ ?

Nếu được anh giúp em thử trên file em gửi với anh nhé... để em học và sửa theo cho phù hợp với bài toán thực tế của em ạ.

Em xin cảm ơn!
 
Upvote 0
Cái table1, table2 thì khai báo như thế nào ạ ?

Mình cứ đọc thật chậm từng chữ thôi là được.

'table1, table2 là mảng dữ liệu cột A:O của 2 sheets'

Giả bảng dữ liệu ở vùng "A3:O400"
table1 = sheet1.range("A3:O400").Value2
table2 = sheet2.range("A3:O400").Value2
 
Upvote 0
Mình cứ đọc thật chậm từng chữ thôi là được.

'table1, table2 là mảng dữ liệu cột A:O của 2 sheets'

Giả bảng dữ liệu ở vùng "A3:O400"
table1 = sheet1.range("A3:O400").Value2
table2 = sheet2.range("A3:O400").Value2
Dạ em có làm như này thì sai đâu vậy ạ

Dim table1 As Variant, table2 As Variant

Dim i, i_row As Long
Dim compare2RowsOfTable As Boolean

Dim lastrow_volumn As Long, lastrow_cost As Long
lastrow_volumn = Sheet5.Cells(Sheet5.Rows.Count, "A").End(xlUp).Row
lastrow_cost = Sheet6.Cells(Sheet6.Rows.Count, "A").End(xlUp).Row

table1 = Sheet5.Range("A2:O" & lastrow_volumn).Value2
table2 = Sheet6.Range("A2:O" & lastrow_cost).Value2

For i = 1 To 15

For i_row = 2 To 20
If table1(i_row, i) <> table2(i_row, i) Then
MsgBox "yes"
End If
Next i_row

Next i
 
Upvote 0
Dùng hàm UDF nhé
Tại ô B8, nhập :
=ThanhTien(B1:B5)
với B1:B5 là vùng chứa điều kiện
Vì ô L2 của 2 bảng khác nhau nên kết quả là "Khong Tim Thay"
Nếu chỉnh L2 cho bằng nhau thì kết quả là 4.600.000 (=100*46000)

Cách dùng: Chuột phải tên sheet, view code, insert/ module rồi copy đoạn code này vào:
PHP:
Option Explicit
Function ThanhTien(ByVal rng As Range)
Dim lr&, i&, i2&, j&, vol, cos, cell As Range, s As String, s1 As String, s2 As String
For Each cell In rng
    s = IIf(s = "", "", s & "|") & cell
Next
With Sheets("Volumn")
    lr = .Cells(Rows.Count, "Q").End(xlUp).Row
    vol = .Range("A2:Q" & lr).Value
End With
With Sheets("Cost")
    lr = .Cells(Rows.Count, "Q").End(xlUp).Row
    cos = .Range("A2:Q" & lr).Value
End With
For i = 1 To UBound(vol)
    s1 = vol(i, 2) & "|" & vol(i, 1) & "|" & vol(i, 3) & "|" & vol(i, 6) & "|" & vol(i, 7)
    If s1 = s Then
        For i2 = 1 To UBound(cos)
            s2 = cos(i2, 2) & "|" & cos(i2, 1) & "|" & cos(i2, 3) & "|" & cos(i2, 6) & "|" & cos(i2, 7)
            If s2 = s Then
                For j = 4 To 15
                    If vol(i, j) <> cos(i2, j) Then
                        ThanhTien = "Khong tim thay"
                        Exit Function
                    End If
                Next
                ThanhTien = vol(i, 17) * cos(i2, 17)
                Exit Function
            End If
        Next
    End If
Next
End Function
 

File đính kèm

  • File.xlsm
    119.6 KB · Đọc: 3
Upvote 0
em xin cảm ơn mọi người rất nhiều ạ!
 
Upvote 0
Web KT
Back
Top Bottom