So sánh 2 file excel có các cột trùng nhau theo điều kiện mong muốn thì trả về số liệu tương ứng. Nhờ mọi người giúp ạ!

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

Manhhung90

Thành viên chính thức
Tham gia
3/4/20
Bài viết
94
Được thích
5
Nhờ mọi người giúp mình với ạ. Mình có file cần so sánh như sau: các cột A,B,C của sheet 1 với cột B,C,E của sheet 2. Nếu thoả mãn trùng hết các điều kiện thì trả về cột D của sheet 1 là số liệu cột D của sheet 2 tương ứng với dòng trùng. Xin cảm ơn ạ
 

File đính kèm

  • so sanh.xlsx
    127.9 KB · Đọc: 9
Có một điều mà rất nhiều người mắc phải không chỉ một lần là không cho vài ví dụ kết quả mong muốn (làm bằng thủ công), cứ để ai đó định giúp tha hồ đoán.
 
Có một điều mà rất nhiều người mắc phải không chỉ một lần là không cho vài ví dụ kết quả mong muốn (làm bằng thủ công), cứ để ai đó định giúp tha hồ đoán.
Mình không làm thủ công kết quả trong file nhưng mình có nói ạ. Mình xin rút kinh nghiệm ạ
Bài đã được tự động gộp:

Để thực hiện yêu cầu của bạn trong Excel bằng VBA, bạn có thể sử dụng đoạn mã dưới đây. Mã này sẽ so sánh các cột A, B, C của Sheet1 với các cột B, C, E của Sheet2. Nếu tất cả các điều kiện được thỏa mãn, nó sẽ cập nhật giá trị ở cột D của Sheet1 với giá trị ở cột D của Sheet2.

Dưới đây là mã VBA mà bạn có thể sử dụng:


Sub CompareAndUpdate()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long
Dim matchFound As Boolean

' Đặt các sheet
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

' Tìm dòng cuối trong mỗi sheet
lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
lastRow2 = ws2.Cells(ws2.Rows.Count, "B").End(xlUp).Row

' Duyệt qua từng dòng của Sheet1
For i = 2 To lastRow1 ' Giả sử có tiêu đề ở dòng 1
matchFound = False

' Duyệt qua từng dòng của Sheet2
For j = 2 To lastRow2 ' Giả sử có tiêu đề ở dòng 1
' So sánh các điều kiện
If ws1.Cells(i, 1).Value = ws2.Cells(j, 2).Value And _
ws1.Cells(i, 2).Value = ws2.Cells(j, 3).Value And _
ws1.Cells(i, 3).Value = ws2.Cells(j, 5).Value Then

' Nếu trùng khớp, lấy giá trị từ cột D của Sheet2
ws1.Cells(i, 4).Value = ws2.Cells(j, 4).Value ' Cột D là chỉ số 4
matchFound = True
Exit For ' Không cần kiểm tra các dòng còn lại trong Sheet2
End If
Next j

' Nếu không tìm thấy khớp, có thể thực hiện các hành động khác, nếu cần
If Not matchFound Then
ws1.Cells(i, 4).Value = "" ' Xóa giá trị nếu không tìm thấy khớp
End If
Next i

MsgBox "Hoàn tất việc so sánh và cập nhật dữ liệu!"
End Sub


Hướng dẫn sử dụng:​

  1. Mở Excel và nhấn Alt + F11 để mở cửa sổ VBA.
  2. Chọn Insert -> Module để tạo một module mới.
  3. Sao chép và dán đoạn mã trên vào module mới.
  4. Đóng cửa sổ VBA và trở về Excel.
  5. Nhấn Alt + F8, chọn CompareAndUpdate, rồi nhấn Run.

Lưu ý:​

  • Đảm bảo tiêu đề nằm ở dòng đầu tiên của cả hai sheet.
  • Mã này sẽ xóa giá trị trong cột D của Sheet1 nếu không tìm thấy giá trị khớp trong Sheet2. Bạn có thể tùy chỉnh hành động này nếu cần.
Cảm ơn bạn nhiều ạ. Cho mình hỏi thêm là nếu bên sheet 2 có 2 dòng trùng trở lên với sheet 1 thì lấy dữ liệu các dòng sau được không ạ. Ví dụ kết quả là 1,2,3... do file mình nhiều lúc kết quả nhiều hơn 1 ạ. Nhờ bạn giúp mình lần nữa ạ!!
 
Lần chỉnh sửa cuối:
Nhờ mọi người giúp mình với ạ. Mình có file cần so sánh như sau: các cột A,B,C của sheet 1 với cột B,C,E của sheet 2. Nếu thoả mãn trùng hết các điều kiện thì trả về cột D của sheet 1 là số liệu cột D của sheet 2 tương ứng với dòng trùng. Xin cảm ơn ạ
Bạn tham khảo code trong file> nhấn vào "Bấm một phát" để được kết quả.
Nếu tôi suy nghĩ đúng và dữ liệu như file đính kèm thì kết quả chạy code chỉ được 1 dòng.
Hy vọng đúng.
 

File đính kèm

  • so sanh.xlsm
    139.9 KB · Đọc: 6
Web KT

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

Back
Top Bottom