Xin góp vui thêm 2 cách VBA: (làm từ lúc đầu hôm nhưng mạng cứ cà giựt nên tới giờ mới gửi lên được. Hic...)
- Cách 1: Sử dụng Array với sự kiện Worksheet_Change:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr, Arr(), i As Long, j As Long, k As Long, S As String
If Target.Address <> "$I$7" Or Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
On Error Resume Next
[H12:M65000,K7].Clear
S = [I7]
sArr = Range([A6], [A65000].End(xlUp)).Resize(, 6)
ReDim Arr(1 To UBound(sArr), 1 To 6)
For i = 1 To UBound(sArr)
If sArr(i, 2) = S Then
k = k + 1
Arr(k, 1) = k
Arr(k, 2) = sArr(i, 3)
Arr(k, 3) = sArr(i, 2)
For j = 4 To 6
Arr(k, j) = sArr(i, j)
Next
End If
Next
[H12].Resize(k, 6) = Arr
[K7] = k
[H12].CurrentRegion.Borders.LineStyle = 1
End Sub[/GPECODE]
- Cách 2: Sử dụng Advanced với sự kiện Worksheet_Change (với cách này thì phải sửa tiêu đề một chút để có thể sử dụng AdvancedFilter):
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$I$7" Or Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
[H12:M65000,K7].Clear
[A5].CurrentRegion.AdvancedFilter 2, [I6:I7], [H11:M11]
With [H11].CurrentRegion
[K7] = .Rows.Count - 1
If .Rows.Count > 1 Then
With Range([H12], [H65000].End(xlUp))
.FormulaArray = "=ROW(R1:R" & [H11].CurrentRegion.Rows.Count - 1 & ")"
.Value = .Value
End With
End If
.Borders.LineStyle = 1
End With
End Sub[/GPECODE]