1. Cách 1: Sử dụng cột phụ và công thức (trên sheet Dung cong thuc):Em có 1 bảng sản phẩm có những số lượng âm và dương, nay em muốn lọc nhứng sản phẩm có số lượng âm sang 1 sheet khác để báo cáo tình hình. Mong các anh chị giúp em. Thk
=IF(C5<0,MAX(D$4:D4)+1,"")
=IF(ROW(1:1)>MAX('DL ban dau'!$D:$D),"",INDEX('DL ban dau'!A$5:A$10000,MATCH(ROW(1:1),'DL ban dau'!$D$5:$D$10000,0)))
Private Sub Worksheet_Activate()
UsedRange.Clear
Sheet1.[4:4].Copy [A1]
[IV2].FormulaR1C1 = "='" & Sheet1.Name & "'!R[3]C3<0"
Sheet1.[A4].CurrentRegion.AdvancedFilter xlFilterCopy, [IV1:IV2], [A1].CurrentRegion
[IV2].Clear
End Sub
Code của bạn là:Mấy ngày theo dõi các bài viết về mảng "quá đã", thấy bài này cũng có thể dùng mảng nên làm như một bài tập. Nếu thấy còn có gì đó cần "túm gọn" nữa thì xin các bạn góp ý.
Public Sub GPE()
Application.ScreenUpdating = False
Dim nn As Long, i As Long, k As Long, Rngs(), Arr()
nn = Sheet1.[A65000].End(xlUp).Row
Rngs = Sheet1.Range("A5:C" & nn)
ReDim Arr(1 To nn - 4, 1 To 3)
For i = 1 To nn - 4
If Rngs(i, 3) < 0 Then
k = k + 1
Arr(k, 1) = Rngs(i, 1)
Arr(k, 2) = Rngs(i, 2)
Arr(k, 3) = Rngs(i, 3)
End If
Next
With Sheet3
.Range([A5], [A5].End(xlDown)).Resize(, 3).Clear
.Range("A5:C" & k + 4).Value = Arr
.Range("A4:C" & k + 4).Borders.LineStyle = xlContinuous
End With
End Sub
Public Sub GPE()
Application.ScreenUpdating = False
Dim i As Long, k As Long, Rngs(), Arr()
On Error Resume Next
Rngs = Sheet1.Range("A5:C65000").Value
ReDim Arr(1 To UBound(Rngs, 1), 1 To 3)
For i = 1 To UBound(Rngs, 1)
If Rngs(i, 3) < 0 Then
k = k + 1
Arr(k, 1) = Rngs(i, 1)
Arr(k, 2) = Rngs(i, 2)
Arr(k, 3) = Rngs(i, 3)
End If
Next
If k Then
With Sheet3
.Range("A5:C60000").ClearContents
.Range("A5").Resize(k, 3).Value = Arr
End With
End If
Application.ScreenUpdating = True
End Sub