Option Explicit
Private Sub Tong_cong()
Dim Dic As Object, Col As Object, ws As Worksheet, Tem As String, Rws As Long
Dim R As Long, I As Long, J As Long, K As Long, C As Long
Dim sArr As Variant, dArr(1 To 10000, 1 To 40)
Set Dic = CreateObject("Scripting.Dictionary")
Set Col = CreateObject("Scripting.Dictionary")
With Application
.CalculateBeforeSave = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
.EnableCancelKey = xlErrorHandler
End With
With Sheets("Tong hop cong")
sArr = .Range("B6").Resize(100, 34).Value
For J = 4 To 34
If sArr(1, J) <> Empty Then
If IsDate(sArr(1, J)) Then Col.Item(Day(sArr(1, J))) = J
End If
Next J
Set Dic = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(sArr, 1)
Dic.Item(sArr(I, 1)) = I
Next
End With
For Each ws In Worksheets
If IsNumeric(ws.Name) Then
C = Col.Item(Val(ws.Name))
sArr = ws.Range("B2", ws.Range("B65000").End(xlUp)).Resize(, 17).Value
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Len(sArr(I, 1)) = 5 And Left(sArr(I, 1), 1) < 3 And sArr(I, 17) > 0 Then
If Dic.exists(Tem) Then
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
dArr(K, 3) = sArr(I, 3)
End If
Rws = Dic.Item(Tem)
dArr(Rws, C) = sArr(I, 17)
End If
Next I
End If
Next ws
Sheets("Tong hop cong").Range("B7").Resize(K, 34) = dArr
Set Dic = Nothing
Set Col = Nothing
sArr = Range("A6").CurrentRegion
R = UBound(sArr, 1)
C = UBound(sArr, 2)
ReDim tArr(2 To R, 1 To 5)
For I = 2 To R
For J = 5 To C
If sArr(1, J) <= sArr(I, 1) Then
If IsNumeric(sArr(I, J)) Then
tArr(I, 1) = tArr(I, 1) + sArr(I, J)
ElseIf sArr(I, J) Like "1D" Then
tArr(I, 2) = Application.WorksheetFunction.Sum(tArr(I, 2) + Left(sArr(I, J), InStr(1, sArr(I, J), "D") - 1))
End If
ElseIf sArr(1, J) > sArr(I, 1) Then
If IsNumeric(sArr(I, J)) Then
tArr(I, 3) = tArr(I, 3) + sArr(I, J)
ElseIf sArr(I, J) Like "1D" Then
tArr(I, 4) = Application.WorksheetFunction.Sum(tArr(I, 4) + Left(sArr(I, J), InStr(1, sArr(I, J), "D") - 1))
End If
End If
Next J
tArr(I, 5) = tArr(I, 1) + tArr(I, 2) + tArr(I, 3) + tArr(I, 4)
Next I
Sheets("Tong hop cong").Range("AK7").Resize(I - 2, 5) = tArr
Sheets("Tong hop cong").Range("A6").CurrentRegion.Borders.LineStyle = xlContinuous
With Application
.CalculateBeforeSave = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.EnableEvents = True
.CalculateBeforeSave = True
.EnableCancelKey = xlInterrupt
End With
End Sub