Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Worksheet, WF As Object, CSDL As Range, cRit As Range, Cls As Range
Dim Rws As Long, GPE As Double
If Not Intersect(Target, [B1]) Is Nothing Then
Set Sh = ThisWorkbook.Worksheets("DuLieu")
Set WF = Application.WorksheetFunction
Set CSDL = Sh.[B2].CurrentRegion: Set cRit = Sh.[AA1:AC2]
For Each Cls In Range([A4], [A4].End(xlDown))
Sh.[AA2].Value = Cls.Value: GPE = WF.DCountA(CSDL, Sh.[A1], cRit)
If GPE Then Cls.Offset(, 1).Value = GPE
Next Cls
End If
End Sub