Function DungBangTra(ByVal rg As Range, ByVal col1 As Long, col2 As Long) As Object
[COLOR=#008000]' tao bang tra tuong tu nhu VLookup
' gom mot cot key va 2 cot values
' do can 2 values cho nen value cua dic la mot truong kep.
' co nhieu cach tao truong kep. Trong vi du nay ta dung array lam truong kep
' lưu ý: code này đọc thẳng trong cells. Nếu dùng array để cóp ra trước thì nhanh hơn nhưng nếu gặp range lớn phải có cách nhả bộ nhớ kẻo bị hết bộ nhớ
[/COLOR]Set DungBangTra = CreateObject("scripting.dictionary")
Dim ky As Variant
With DungBangTra
For Each ky In rg
.Item(ky.Value) = Array(ky.Offset(0, col1), ky.Offset(0, col2))
Next ky
End With
End Function
Sub NAM()
Dim Data As Variant, Arr As Variant, KQ As Variant
Dim k, i As Long
Dim bangTra As Object, valArray As Variant
Set bangTra = DungBangTra(Sheet1.Range("B5:B8"), 1, 2)
[COLOR=#ff0000]' Sheet1.Range("B5:B8") là cái range của trị cần tra, 1 là offset để lấy trị thứ nhất, 2 là cột offset để lấy trị thứ 2
' thay đổi cái range key và cột values ở trên cho phù hợp với nhu cầu
[/COLOR]
[COLOR=#008000]' Data = Sheet1.Range("B5:d8").Value
[/COLOR]Arr = Sheet2.Range("B4:B6").Value
ReDim KQ(1 To UBound(Arr), 2)
For i = 1 To UBound(Arr, 1)
If bangTra.Exists(Arr(i, 1)) Then
valArray = bangTra.Item(Arr(i, 1))
KQ(i, 0) = valArray(0)
KQ(i, 1) = valArray(1)
End If
[COLOR=#008000]' For k = 1 To UBound(Data, 1)
'
' If Arr(i, 1) = Data(k, 1) Then
' KQ(i, 0) = Data(k, 2)
' KQ(i, 1) = Data(k, 3)
' End If
' Next k
[/COLOR]Next i
Sheet2.Range("C4").Resize(i - 1, 2).Value = KQ
Set bangTra = Nothing
End Sub