Option Explicit Sub test() Dim dic As Object Dim ws1 As Worksheet, ws2 As Worksheet Dim c As Range Dim s As String Set dic = CreateObject("scripting.dictionary") Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For Each c In ws2.Range("a1", ws2.Range("a" & Rows.Count).End(xlUp)) dic(c.Value & vbTab & c.Offset(, 1).Value) = c.Offset(, 2).Value Next For Each c In ws1.Range("a1", ws1.Range("a" & Rows.Count).End(xlUp)) s = c.Value & vbTab & c.Offset(, 1).Value If dic.exists(s) Then c.Offset(, 2).Value = dic(s) Next End Sub