Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Loi_WC
If Not Intersect(Target, [B2]) Is Nothing Then
Dim Sh As Worksheet: Dim sRw As Long, Rw As Long
Dim Rng As Range, sRng As Range, cRng As Range
Dim MyAdd As String: Dim Col As Byte
Set Sh = Sheets("TKB chung")
Set Rng = Union(Sh.Range("c5:s34"), Sh.Range("c40:o43"), Sh.Range("c45:o69"))
Set sRng = Rng.Find(Target.Value, , xlFormulas, xlPart)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Union(Range("C5:M9"), Range("B6:B9")).ClearContents
Do
sRw = sRng.Row: Rw = 4 + Sh.Cells(sRw, "B")
Col = Switch(sRw < 10, 2, sRw < 15, 4, sRw < 20, 6, sRw < 25, 8, _
sRw < 30, 10, sRw < 35, 12, sRw < 45, 3, sRw < 50, 5, sRw < 55, _
7, sRw < 60, 9, sRw < 65, 11, sRw < 70, 13)
Cells(Rw, Col).Value = Sh.Cells(IIf(sRw < 35, 4, 39), sRng.Column) & _
IIf(Len(sRng.Value) = 4, "(" & Right(sRng.Value, 1) & ")", "")
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End If
Err_WC: Exit Sub
Loi_WC:
MsgBox sRng.Address: Resume Err_WC
End Sub