Option Explicit
Dim endR As Long, i As Long, s As Long, k As Long, t As Long, n As Long, j As Long
Dim solan As Long
Dim Arr(), ArrXuat(), ArrNhap()
Dim Dic As Object
Dim wf As WorksheetFunction, myRng As Range
Dim tenCN As String, Tmp As String
Sub LocCN()
Set wf = WorksheetFunction
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("CongNo")
tenCN = .[D5]
.Range("A9:Q1000").ClearContents
End With
With Sheets("data")
.AutoFilterMode = False
endR = .[C65000].End(xlUp).Row 'Lay cot C, co the chuyen cot nay'
Set myRng = .Range("C4:C" & endR)
solan = wf.CountIf(myRng, tenCN)
If solan = 0 Then
MsgBox "Khong co data"
Exit Sub
End If
Arr = myRng.Offset(, -1).Resize(, 15).Value
End With
ReDim ArrXuat(1 To solan, 1 To 16)
ReDim ArrNhap(1 To solan, 1 To 16)
s = 0: t = 0
For i = 1 To UBound(Arr)
If Arr(i, 2) = tenCN Then
If Len(Arr(i, 6)) > 0 Then
s = s + 1
ArrXuat(s, 1) = s 'Stt
For k = 2 To 9
ArrXuat(s, k) = Arr(i, k - 1)
Next k
Else
t = t + 1
For k = 2 To 16
ArrNhap(t, k) = Arr(i, k - 1)
Next k
End If
End If
Next i
n = 0
For k = 1 To s
For i = 1 To t
If ArrNhap(i, 4) = ArrXuat(k, 4) Then
n = n + 1
Tmp = i
If Not Dic.Exists(Tmp) Then
Dic.Add Tmp, n
For j = 10 To 13
ArrXuat(k, j) = ArrNhap(i, j)
Next j
Else
Exit For
End If
End If
Next i
Next k
With Sheets("CongNo")
.[a9].Resize(s, 16) = ArrXuat
End With
Set myRng = Nothing: Set wf = Nothing: Set Dic = Nothing
Erase Arr(), ArrXuat(), ArrNhap()
End Sub