Lọc dữ liệu theo điều kiện

Liên hệ QC

alias1313

Thành viên hoạt động
Tham gia
7/4/17
Bài viết
163
Được thích
13
Em muốn lọc dữ liệu trong sheet : Data.
- Em muốn lọc những người sẽ thi giữ bậc lần 1 ( GB1) trong năm 2017 ( là những người được đánh dấu "x").
Và thêm những người thi giữ bậc lần 2 (GB2) trong năm 2018.

1. Theo năm(hàng 6): Có cách nào để em có thể tùy chọn 1 năm, 2 năm gần nhau(2017,2018), hay 2 năm cách nhau( 2017, 2019).
2. Theo GB1,GB2,NB1,NB2: em phải làm thế nào để sau khi chon năm thì em có thể chọn thêm/bớt các điều kiện GB1,GB2,NB1,NB2.

Mong anh/chị giúp đỡ. em cảm ơn nhiều! ( em có file đính kèm).
 

File đính kèm

  • GiuBac.xls
    38 KB · Đọc: 4
Em muốn lọc dữ liệu trong sheet : Data.
- Em muốn lọc những người sẽ thi giữ bậc lần 1 ( GB1) trong năm 2017 ( là những người được đánh dấu "x").
Và thêm những người thi giữ bậc lần 2 (GB2) trong năm 2018.

1. Theo năm(hàng 6): Có cách nào để em có thể tùy chọn 1 năm, 2 năm gần nhau(2017,2018), hay 2 năm cách nhau( 2017, 2019).
2. Theo GB1,GB2,NB1,NB2: em phải làm thế nào để sau khi chon năm thì em có thể chọn thêm/bớt các điều kiện GB1,GB2,NB1,NB2.

Mong anh/chị giúp đỡ. em cảm ơn nhiều! ( em có file đính kèm).
Bạn trang trí lại Form
 

File đính kèm

  • GiuBac.xls
    50 KB · Đọc: 10
Upvote 0

Anh ơi! Hình như file bị mất Macro! Em chạy nó báo: "a macro may not available in this workbook or all macros may be disabled".
Em kiểm tra thì có code phần lọc dữ liệu: "Private Sub CommandButton1_Click()".
Mong anh xem giúp em! Em cảm ơn anh @HieuCD rất nhiều!
 

File đính kèm

  • GiuBac (2).xlsm
    20.3 KB · Đọc: 3
Upvote 0
Anh ơi! Hình như file bị mất Macro! Em chạy nó báo: "a macro may not available in this workbook or all macros may be disabled".
Em kiểm tra thì có code phần lọc dữ liệu: "Private Sub CommandButton1_Click()".
Mong anh xem giúp em! Em cảm ơn anh @HieuCD rất nhiều!
Mình xóa mất module1
 

File đính kèm

  • GiuBac (2).xlsm
    21.4 KB · Đọc: 18
Upvote 0
Anh ơi! Hình như file bị mất Macro! Em chạy nó báo: "a macro may not available in this workbook or all macros may be disabled".
Em kiểm tra thì có code phần lọc dữ liệu: "Private Sub CommandButton1_Click()".
Mong anh xem giúp em! Em cảm ơn anh @HieuCD rất nhiều!


Code của anh chạy đúng theo ý em muốn! Nhưng quả thật em chưa gặp cách viết code dạng như thế nên em tìm hiểu mãi cũng không hiểu hết! Nên em mong anh @HieuCD chú giải giúp em!

Mã:
Private Sub CommandButton1_Click()
  Dim dArr As Variant, tArr As Variant
  Dim Rng As Range
  Dim i As Long, j As Integer, Col As Integer, Test As Boolean
 
  Range("A10:A200").EntireRow.Hidden = False 'Chinh lai so 200
  dArr = Range("H10:AD" & Range("F" & Rows.Count).End(xlUp).Row).Value
  ReDim tArr(1 To UBound(dArr))

  For j = 0 To 11
    If UserForm1.Controls(j).Value Then
      Test = True
      Col = j * 2 + 1
      For i = 1 To UBound(dArr)
        If UCase(dArr(i, Col)) = "X" Then tArr(i) = True
      Next i
    End If
  Next j
 
 
  If Test = True Then
    For i = 1 To UBound(dArr)
      If tArr(i) = False Then
        If Rng Is Nothing Then
          Set Rng = Cells(i + 9, 1)
        Else
          Set Rng = Union(Rng, Cells(i + 9, 1))
        End If
      End If
    Next i
    Rng.EntireRow.Hidden = True
  End If
End Sub

1. Test = true: mình có thể hiểu câu lệnh này là để gọi hàm true/false không ạ? Em có thể đọc tài liệu phần nào trong VBA nói về hàm này ạ? Em cố kiếm nhưng không thấy!
2. tArr(i): Mảng này để xác định vùng cần tìm tương ứng với (i)
3.Rng: Với mỗi giá trị (i) mà tArr(i) = False ( Nghĩa là cells khác "X") ta gán Rng cho vùng đó rồi ẩn nó đi.

Em trình bày theo cách hiểu của mình, do kiến thức VBA còn kém mong anh giúp đỡ!
 
Upvote 0
Code của anh chạy đúng theo ý em muốn! Nhưng quả thật em chưa gặp cách viết code dạng như thế nên em tìm hiểu mãi cũng không hiểu hết! Nên em mong anh @HieuCD chú giải giúp em!

Mã:
Private Sub CommandButton1_Click()
  Dim dArr As Variant, tArr As Variant
  Dim Rng As Range
  Dim i As Long, j As Integer, Col As Integer, Test As Boolean
 
  Range("A10:A200").EntireRow.Hidden = False 'Chinh lai so 200
  dArr = Range("H10:AD" & Range("F" & Rows.Count).End(xlUp).Row).Value
  ReDim tArr(1 To UBound(dArr))

  For j = 0 To 11
    If UserForm1.Controls(j).Value Then
      Test = True
      Col = j * 2 + 1
      For i = 1 To UBound(dArr)
        If UCase(dArr(i, Col)) = "X" Then tArr(i) = True
      Next i
    End If
  Next j
 
 
  If Test = True Then
    For i = 1 To UBound(dArr)
      If tArr(i) = False Then
        If Rng Is Nothing Then
          Set Rng = Cells(i + 9, 1)
        Else
          Set Rng = Union(Rng, Cells(i + 9, 1))
        End If
      End If
    Next i
    Rng.EntireRow.Hidden = True
  End If
End Sub

1. Test = true: mình có thể hiểu câu lệnh này là để gọi hàm true/false không ạ? Em có thể đọc tài liệu phần nào trong VBA nói về hàm này ạ? Em cố kiếm nhưng không thấy!
2. tArr(i): Mảng này để xác định vùng cần tìm tương ứng với (i)
3.Rng: Với mỗi giá trị (i) mà tArr(i) = False ( Nghĩa là cells khác "X") ta gán Rng cho vùng đó rồi ẩn nó đi.

Em trình bày theo cách hiểu của mình, do kiến thức VBA còn kém mong anh giúp đỡ!
Mã:
Private Sub CommandButton1_Click()
  Dim dArr As Variant, tArr As Variant
  Dim Rng As Range 'là những ô cột A, dòng sẽ ẩn
  Dim i As Long, j As Integer, Col As Integer, Test As Boolean'Biến Test là giá trị luận lý, giá trị ban đầu = False

  Range("A10:A200").EntireRow.Hidden = False 'Chinh lai so 200, Bỏ ẩn tất cả các dòng
  dArr = Range("H10:AD" & Range("F" & Rows.Count).End(xlUp).Row).Value
  ReDim tArr(1 To UBound(dArr))'Mảng ghi nhận điều kiện lọc, thỏa điều kiện sẽ gán giá trị true, không thỏa có giá trị ban đầu là Empty (coi như False)

  For j = 0 To 11
   If UserForm1.Controls(j).Value Then
     Test = True' Khi có điều kiện lọc thì gán Test=true
     Col = j * 2 + 1
     For i = 1 To UBound(dArr)
       If UCase(dArr(i, Col)) = "X" Then tArr(i) = True'Dòng thứ i có tArr(i)=true sẽ hiện ra
     Next i
   End If
  Next j


  If Test = True Then 'Khi có điều kiện lọc mới chạy code, không có thì không lọc
   For i = 1 To UBound(dArr)
     If tArr(i) = False Then 'Dòng i của mảng sẽ ẩn
       If Rng Is Nothing Then
         Set Rng = Cells(i + 9, 1)'i+9 là dòng ẩn của sheet
       Else
         Set Rng = Union(Rng, Cells(i + 9, 1))
       End If
     End If
   Next i
   Rng.EntireRow.Hidden = True
  End If
End Sub
 
Upvote 0
Web KT
Back
Top Bottom