Để 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:
- Mở Excel và nhấn Alt + F11 để mở cửa sổ VBA.
- Chọn Insert -> Module để tạo một module mới.
- Sao chép và dán đoạn mã trên vào module mới.
- Đóng cửa sổ VBA và trở về Excel.
- 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.