Xin CODE lọc theo Use drop-Down List

Liên hệ QC

Read Only

Thành viên mới
Tham gia
8/8/08
Bài viết
19
Được thích
8
Chào các bác


Em có vấn đề về lọc dữ liệu như trong file đính kèm

Dùng công thức thấy có vẻ khó khăn. Xin các bác đoạn code để lọc cho nhẹ nhàng

(Dữ liệu thực tế có thể nhiều hơn)
 

File đính kèm

Khô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.
 
Upvote 0
Thử 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)
PHP:
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
 

File đính kèm

Upvote 0
Khô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.
Hi
Có thể mình trình bày chưa được rõ ràng. Mong bạn hiểu đúng ý mình nhé (lọc các dòng liên quan như STT)

Thử 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)
Chân thành cảm ơn rất nhiều

Tạm thời lọc được 4 em: "Trojan", "virus", "dropper" và "worm"
=> Thật tuyệt vời: Lọc bằng công thức thì chạy ì ạch mãi mới ra kết quả

cái "Other" tôi đoán là những thứ còn lại
=> Đoán rất chính xác

nhưng chả biết lọc thể nào cả (khó thật)
=> 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

----------------------------------
Sau khi quét virus thấy có list, muốn phân loại các virus đã nhiễm vào máy và chương trình đã xử lý được ... :euro:
 
Upvote 0
=> 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
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
 
Upvote 0
-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.
 
Upvote 0
-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.
Xin thầy làm dùm luôn! Em bó bột chổ này rồi
Cái khó còn nằm ở chổ: Dử liệu bên sheet Data không đồng nhất, có mục thì 5 dòng, mục lại 4 dòng
 
Upvote 0
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

thế này được không:
1/ Nếu chọn Other: Copy liệu nguồn vào 1 vùng tạm (có thể ở ngay sheet BC)
2/ Xem cái nào = "Trojan", "virus", "dropper" và "worm" thì xóa sạch...
3/ Điền lại STT cái còn lại trong sheet BC
 
Upvote 0
Các bạn kiểm tra giúp xem được chưa:
Mã:
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
 

File đính kèm

Upvote 0
Các bạn kiểm tra giúp xem được chưa:

Công thức trong cột A bên sheet Data là để em thống kê tống số việc mà chương trình quét vius đã làm
Bác làm mất công thức. Em nhập lại công thức thì code chạy báo lỗi

Nếu có thể lọc chỉ dựa vào cột B thì càng tốt (Vì cột A là công thức nên có thể thay đổi vì mục đích khác)
 
Upvote 0
Đã chỉnh theo yêu cầu của bạn. Xem dùm thử OK chưa.
 

File đính kèm

Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom