Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nam, i
If Target.Address = "$P$2" Then
Nam = Target.Value2
If Len(Nam) > 0 Then
Range("Q5") = Nam - 1
i = Range("P1000000").End(xlUp).Row
If i > 5 Then Range("P6:AB" & i).Clear
Call Loc(Nam)
End If
End If
End Sub
Private Sub Loc(ByVal Nam As Long)
Dim sArr(), TonDau(), Nhap(), tNhap(), Xuat(), tXuat()
Dim i As Long, k1 As Long, k2 As Long, j As Long, sRow As Long, sCol As Long
Dim NamGoc As Long, tmp, Dau As Long
sArr = Range("A6", Range("M1000000").End(xlUp)).Value
sRow = UBound(sArr): sCol = UBound(sArr, 2)
ReDim Nhap(1 To sRow, 1 To sCol)
ReDim tNhap(1 To 1, 1 To sCol)
ReDim Xuat(1 To sRow, 1 To sCol)
ReDim tXuat(1 To 2, 1 To sCol)
TonDau = Range("D5:M5").Value
NamGoc = Range("B5").Value
Dau = 1
For i = 1 To sRow
tmp = sArr(i, 1)
If TypeName(tmp) = "Date" Then
tmp = Year(tmp)
If tmp > NamGoc Then
If tmp < Nam Then
For j = 1 To UBound(TonDau, 2)
If IsNumeric(sArr(i, j + 3)) Then
TonDau(1, j) = TonDau(1, j) + sArr(i, j + 3) * Dau
End If
Next j
ElseIf tmp = Nam Then
If Dau = 1 Then
k1 = k1 + 1
For j = 1 To sCol
Nhap(k1, j) = sArr(i, j)
If IsNumeric(sArr(i, j)) And j > 3 Then tNhap(1, j) = tNhap(1, j) + sArr(i, j)
Next j
Else
k2 = k2 + 1
For j = 1 To sCol
Xuat(k2, j) = sArr(i, j)
If IsNumeric(sArr(i, j)) And j > 3 Then tXuat(1, j) = tXuat(1, j) + sArr(i, j)
Next j
End If
End If
End If
Else
If UCase(tmp) Like "T?NG NH?P" Then Dau = -1: tNhap(1, 1) = tmp
If UCase(tmp) Like "T?NG XU?T" Then tXuat(1, 1) = tmp
If UCase(tmp) Like "T?N CU?I" Then tXuat(2, 1) = tmp
End If
Next i
For j = 4 To sCol
tXuat(2, j) = tNhap(1, j) + TonDau(1, j - 3) - tXuat(1, j)
Next j
Range("S5:AB5") = Res
Range("P6:AB6").Resize(k1) = Nhap
Range("P6:AB6").Offset(k1 + 1) = tNhap
Range("P6:AB6").Offset(k1 + 2).Resize(k2) = Xuat
Range("P6:AB6").Offset(k1 + k2 + 3).Resize(2) = tXuat
End Sub