Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, TempRng As Range
Dim Dong As Long, Sd As Long, Temp As String
If Target.Address = "$B$1" Then
Set Rng = Sheet1.[B2].CurrentRegion.Offset(, 1).Resize(, 1)
[A3:B1000].ClearContents
For Each Clls In Rng
Temp = Trim(Right(Replace(Clls, "[", " ["), 10))
If Temp = "[" & [B1] & "]" Then
Dong = WorksheetFunction.Match(Clls.Offset(, -1), Rng.Offset(, -1), 0)
Sd = WorksheetFunction.CountIf(Rng.Offset(, -1), Clls.Offset(, -1))
Set TempRng = Sheet1.Cells(Dong, 2).Resize(Sd, 1)
Er = [B10000].End(xlUp).Row + 1
With Cells(Er, 2)
.Resize(TempRng.Rows.Count, 1).Value = TempRng.Value
.Offset(, -1) = j + 1: j = j + 1
End With
End If
Next
End If
End Sub
HiKhông rõ khi lọc thì chỉ lọc ra đúng dòng có chứa chuỗi trong Drop-Down List hay cả 4 dòng có liên quan như cái số thứ tự thế bạn? Nếu lọc ra đúng dòng chứa chuỗi thì AutoFilter cũng có thể xử lý ngon lành.
Chân thành cảm ơn rất nhiềuThử file củ chuối này xem!
Tạm thời lọc được 4 em: "Trojan", "virus", "dropper" và "worm"... Còn cái "Other" tôi đoán là những thứ còn lại nhưng chả biết lọc thể nào cả (khó thật)
Tôi đang nghĩ đến hướng:=> có thể dùng phương pháp giống như ta loại trừ những phần thỏa mãn các điều kiện khác có trong drop-down list
Xin thầy làm dùm luôn! Em bó bột chổ này rồi-Nếu thế thì đừng dò tìm theo công thức nữa. Bạn thử dùng hàm find. Xác định vùng, find trong vùng đó có giá trị cần tìm, copy qua sheet2.
Tôi đang nghĩ đến hướng:
1> Đầu tiên sao lưu dử liệu nguồn trước
2> Nếu ta chọn Other thì sẽ tìm trong cột B sheet Data xem cái nào = "Trojan", "virus", "dropper" và "worm" thì xóa sạch... (xóa dòng luôn)...
3> Copy cái còn lại sang sheet BC
4> Trả dử liệu đã sao lưu về vị trí ban đầu
Nhưng.... Ác 1 cái nếu làm vậy thì ở bước 4, dử liệu trả về sẽ là giá trị (công thức mất sạch)... trong khi hiện giờ tôi đang dò tìm là dựa vào công thức tại cột A
Thấy dể mà thật sự không dể tí nào
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lrow1 As Long, lrow2 As Long, stt As Long, Last As Long
Dim i As Byte, khoang As Byte, notcopy As Byte
Dim Rng As Range
Dim StrSearch As String
Dim rngFind
Dim Arr(4)
Arr(1) = "[virus]"
Arr(2) = "[trojan]"
Arr(3) = "[dropper]"
Arr(4) = "[worm]"
If Target.Address = "$B$1" Then
lrow1 = Sheet1.Range("B65000").End(xlUp).Row
lrow2 = Sheet2.Range("B65000").End(xlUp).Row
stt = 1
Last = 2
Sheet2.Range("A3:B" & lrow2 + 1).ClearContents
With Sheet1
.Cells(lrow1 + 1, 1) = lrow1
For Each Rng In .Range("A2:A" & lrow1 + 10).SpecialCells(xlCellTypeConstants, 1)
lrow2 = Sheet2.Range("B65000").End(xlUp).Row
khoang = Rng.Row - Last
If khoang <> 0 Then
If Sheet2.[B1] <> "other" Then
StrSearch = "[" & Sheet2.[B1] & "]"
Set rngFind = .Cells(Last, 1).Resize(khoang, 2).Find(StrSearch)
If Not rngFind Is Nothing Then
.Cells(Last, 1).Resize(khoang, 2).Copy Destination:=Sheet2.Cells(lrow2 + 1, 1)
Sheet2.Cells(lrow2 + 1, 1) = stt
stt = stt + 1
End If
Else
For i = 1 To 4
Set rngFind = .Cells(Last, 1).Resize(khoang, 2).Find(Arr(i))
If Not rngFind Is Nothing Then notcopy = 1
Next
If notcopy = 0 Then
.Cells(Last, 1).Resize(khoang, 2).Copy Destination:=Sheet2.Cells(lrow2 + 1, 1)
Sheet2.Cells(lrow2 + 1, 1) = stt
stt = stt + 1
End If
End If
notcopy = 0
End If
Last = Rng.Row
Next
.Cells(lrow1 + 1, 1) = ""
End With
End If
End Sub
Các bạn kiểm tra giúp xem được chưa: