Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D1]) Is Nothing Then
Dim Wf As Object, Sh As Worksheet, Rng As Range, Cls As Range
Dim Rws As Long
1 [c4].Resize(30, 4).ClearContents
Set Sh = ThisWorkbook.Worksheets("CSDL")
3 Rows("3:33").Hidden = False
Set Rng = Sh.[B1].CurrentRegion
5 Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
"BA1:BA2"), CopyToRange:=Sh.Range("BA4:BC4"), Unique:=False
Set Rng = Sh.[BA4].CurrentRegion
7 Rng.Sort Key1:=Sh.Range("BA5"), Order1:=xlAscending, Key2:=Sh.Range("BC5" _
), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
Sh.[ca1:cb1].Value = Sh.[ba4:bb4].Value
9 Rng(1).Resize(Rng.Rows.Count, 2).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sh.Range( _
"CA1:CB1"), Unique:=True
11 Sh.[ca1].CurrentRegion.Offset(1).Copy Destination:=[c4]
Set Wf = Application.WorksheetFunction
13 For Each Cls In Range([c4], [c4].End(xlDown))
Cls.Offset(, 2).Value = Wf.SumIf(Rng, Cls.Value, Sh.[bc4])
15 Next Cls
Rws = [c3].End(xlDown).Row + 2
17 If Rws > 43 Then Rws = 6
Rows(Rws & ":33").Hidden = True
19 End If
End Sub