Dung VBA để lọc dữ liệu theo 2 điều kiện cho trước (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

minhcong.tckt

Thành viên thường trực
Tham gia
13/4/11
Bài viết
385
Được thích
36
Giới tính
Nam
Em tải file đính kèm, mong các huynh tỷ giúp đỡ
sheet "DK1": Danh mục điều kiện 1
sheet "DK2": Danh mục điều kiện 2
Sheet "DA TA": Sheet nhập dữ liệu thô
Sheet "LOC": Khi chọn điều kiện ở A 2 và B 2 đồng thời thì những dòng bên DA TA thỏa mãn điều kiện sẽ được liệt kê đầy đủ bên "LOC"

Cuối cùng có dòng tổng cộng, NGÀY THÁNG NĂM, LẬP BIỂU

Mong nhận được sự giúp đỡ của các huynh tỷ.

Chân thành cảm ơn!!!
 

File đính kèm

1) Tôi chẳng thấy 2 sheet DK1-2 mà chỉ có DM1-2

2) Cả 2 sheet trên trắng bóc chẳng biết điều kiện gì

3) Trong sheet LOC, 2 ô ghi DK1, DK2 là cái gì tôi cũng không biết

4) Cho nên, tôi chẳng biết lọc cái gì và kết quả đạt được của nó như thế nào!
 
Upvote 0
Điều kiện 1 là: cột H bên DATA
Điều kiện 2 là : Cột I bên DATA

khi đánh điều kiện 1 (ví dụ: KCKTV),điều kiện 2 (VD : KCKTV00) trên vào ô A 2, B2 bên "LOC" thì được kết quả
Còn hai sheet danh mục đó em sẽ điền sau, ko ảnh hưởng đến kết quả lọc
 
Upvote 0
Điều kiện 1 là: cột H bên DATA
Điều kiện 2 là : Cột I bên DATA

khi đánh điều kiện 1 (ví dụ: KCKTV),điều kiện 2 (VD : KCKTV00) trên vào ô A 2, B2 bên "LOC" thì được kết quả
Còn hai sheet danh mục đó em sẽ điền sau, ko ảnh hưởng đến kết quả lọc
Nếu vậy thì cứ dùng Advanced Filter đi là xong, có gì khó đâu! Muốn tự động thì record macro quá trình lọc bằng Advanced Filter để có được code, từ đó mà chỉnh sửa lại cho phù hợp
Có điều nếu muốn dùng Advanced Filter thì dữ liệu của bạn phải sửa lại ở dòng tiêu đề, nhất định không được merge cell, đó không phải là 1 CSDL chuẩn
 
Upvote 0
Nếu vậy thì cứ dùng Advanced Filter đi là xong, có gì khó đâu! Muốn tự động thì record macro quá trình lọc bằng Advanced Filter để có được code, từ đó mà chỉnh sửa lại cho phù hợp
Có điều nếu muốn dùng Advanced Filter thì dữ liệu của bạn phải sửa lại ở dòng tiêu đề, nhất định không được merge cell, đó không phải là 1 CSDL chuẩn


Hổm rầy cứ Dit to, Dit nhỏ hoài mệt quá roài, giờ không muốn Dit nữa mà mượn các hàm tự tạo của Thầy ndu96081631 làm luôn cho bạn này chơi!

Thủ tục cho 2 combobox:

Mã:
[COLOR=#006400]'Nap List cho combobox1 khi sheet duoc Active[/COLOR]
Private Sub Worksheet_Activate()
    Call CBBox1
End Sub

[COLOR=#006400]'Nap List cho combobox2 khi ComboBox1 thay doi va chi loc theo Ma o ComboBox1[/COLOR]
Private Sub ComboBox1_Change()
    Call CBBox2
End Sub

Mã:
Sub CBBox1()
    Dim sArray
    sArray = Range(Sheet3.[H7], Sheet3.[H65536].End(xlUp)).Value
    Sheet4.ComboBox1.List() = Unique2DArray(sArray, 1, False)
End Sub

Mã:
Sub CBBox2()
    On Error GoTo ExitSub
    Dim sArray, MyArr, i As Long
    With Sheet4.ComboBox2
        .Clear
        .Text = ""
        sArray = Range(Sheet3.[H7], Sheet3.[I65536].End(xlUp)).Value
        sArray = Filter2DArray(sArray, 1, Sheet4.ComboBox1, False)
        sArray = Unique2DArray(sArray, 2, False)
        ReDim MyArr(1 To UBound(sArray), 1 To 1)
        For i = 1 To UBound(sArray)
            MyArr(i, 1) = sArray(i, 2)
        Next
        .List() = MyArr: Exit Sub
ExitSub:
        .Clear
    End With
End Sub

Thủ tục cho nút lệnh:

Mã:
Sub CmdBtt1()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
        On Error GoTo ExitSub
        Dim sArray, MyArr, i As Long, j As Long
        Call TestRow
        sArray = Range(Sheet3.[B7], Sheet3.[I65536].End(xlUp)).Value
        sArray = Filter2DArray(sArray, 7, Sheet4.ComboBox1, False)
        sArray = Filter2DArray(sArray, 8, Sheet4.ComboBox2, False)
        ReDim MyArr(1 To UBound(sArray), 1 To 6)
        For i = 1 To UBound(sArray)
            MyArr(i, 1) = i
            For j = 1 To 5
                MyArr(i, j + 1) = sArray(i, j)
            Next
        Next
            
       [COLOR=#006400] 'Thu tuc kiem tra so hàng truoc khi nhap lieu:[/COLOR]
        With Sheet4
            i = UBound(MyArr)
            If i > 12 Then
                i = i - 13
                .Range("A9:G" & 9 + i).Insert 2
            End If
        End With
        Sheet4.Range("A8").Resize(UBound(MyArr), 6).Value = MyArr
ExitSub:
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub

Và đương nhiên phải kiểm tra điều kiện "phòng ốc" trước chứ:

Mã:
Sub TestRow()
    Dim i As Long
    With Sheet4
        i = Range("Cong").Row
        If i > 20 Then
            i = i - 21
            .Range("A9:G" & 9 + i).Delete 2
        ElseIf i < 20 Then
            i = 19 - i
            .Range("A9:G" & 9 + i).Insert 2
        End If
        .Range("A8:G19").ClearContents
    End With
End Sub

Lưu ý: Tại ô B20 tôi đặt name là Cong.
 

File đính kèm

Upvote 0
Bạn cũng có thể nạp list cho Combobox1 bằng phương thức này:

PHP:
Private Sub ComboBox1_DropButtonClick()
    Call CBBox1
End Sub

và bỏ cách nạp dưới đây thông qua sheet:

PHP:
Private Sub Worksheet_Activate()
    Call CBBox1
End Sub
 
Upvote 0
Em sẽ vận dụng file anh gửi kèm, có gì em sẽ hỏi thêm
Chân thành cảm ơn
 
Upvote 0
Em nhờ các Bác xem giúp lọc điệu kiện của em, em có bảng dữ liệu, em đã lọc ra hai điều kiện " In" và "Không". Em không biết có cách nào tạo ra một nút marco mà chỉ cần ấn vào đó là nút đó chỉ hiện dòng in, và ẩn lại thì ra toàn bộ. Em gửi file đính kèm. Các Bác xem giúp em với ạ.
 

File đính kèm

Upvote 0
Em nhờ các Bác xem giúp lọc điệu kiện của em, em có bảng dữ liệu, em đã lọc ra hai điều kiện " In" và "Không". Em không biết có cách nào tạo ra một nút marco mà chỉ cần ấn vào đó là nút đó chỉ hiện dòng in, và ẩn lại thì ra toàn bộ. Em gửi file đính kèm. Các Bác xem giúp em với ạ.
nếu in thôi thì thử code sau xem nha...còn nếu đổi ý nữa thì tính tiếp nha _)()(-

Mã:
Sub In_Phieu()
Dim Rng As Range
Application.ScreenUpdating = False
    For Each Rng In [H10:H28]
        If Rng.Value = 0 Then Rng.EntireRow.Hidden = True
    Next
    Range("A1:J36").PrintOut 1
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ý mình không phải vậy, tạo nút marco mà ấn nút đó chỉ hiện cột có chữ mà mình đã lọc theo điều điện "in", nếu ấn tiếp thì hiện toàn bộ bảng tính.
 
Upvote 0
Ý mình không phải vậy, tạo nút marco mà ấn nút đó chỉ hiện cột có chữ mà mình đã lọc theo điều điện "in", nếu ấn tiếp thì hiện toàn bộ bảng tính.
Á vậy thì ok một cái In rồi đó còn cái Else kia ta tính tiếp --=0|||||
 
Upvote 0
Ý mình không phải vậy, tạo nút marco mà ấn nút đó chỉ hiện cột có chữ mà mình đã lọc theo điều điện "in", nếu ấn tiếp thì hiện toàn bộ bảng tính.
Vẫn code cũ chỉ thêm tí mắm, múi thôi...nếu vẫn vậy ta tính tiếp
PHP:
Sub In_Phieu()
Dim Rng As Range
Application.ScreenUpdating = False
    For Each Rng In [H10:H28]
        If Rng.Value = 0 Then Rng.EntireRow.Hidden = True
    Next
    Range("A1:J36").PrintOut 1
Application.ScreenUpdating = True
End Sub
Thêm em này nha
PHP:
Private Sub In_NoIn_Click()
Application.ScreenUpdating = False
    If ActiveSheet.In_NoIn.Caption = "In Phieu" Then
        In_Phieu
        ActiveSheet.In_NoIn.Caption = "Khong In"
    Else
        Range("H9:H28").AutoFilter 1, "<>"
        ActiveSheet.In_NoIn.Caption = "In Phieu"
    End If
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh nhiều, Ý em không phải mục đích để in, mà chỉ để xem bảng tỉnh thôi.
Em đã lọc điều kiện, in và không ở cột F. Em chỉ cần tạo marco khi nào ấn nút đó thì hiện các dòng mà em đã để điều kiện in kia, nếu ấn tiếp sẽ hiện lên hết ah.
 
Upvote 0
Cám ơn anh nhiều, Ý em không phải mục đích để in, mà chỉ để xem bảng tỉnh thôi.
Em đã lọc điều kiện, in và không ở cột F. Em chỉ cần tạo marco khi nào ấn nút đó thì hiện các dòng mà em đã để điều kiện in kia, nếu ấn tiếp sẽ hiện lên hết ah.
Nếu vậy thì xoá dòng sau đi là ok thôi
PHP:
 Range("A1:J36").PrintOut 1
 
Upvote 0
Anh có thế gửi file đính kèm giúp em đc ko, em vẫn chưa xử lý đc.
 
Upvote 0
Em cám ơn anh ah. Nhưng khi em mở ra em ấn nút In không chạy maro hiện dòng chỉ có chữ In. Anh xem giúp em với.
 
Upvote 0
Vâng đúng rùi ah. Sao không được nhỉ, máy em vẫn chạy marco bình thường mà. Không hiểu sao File e down về nó vẫn không chạy nút đó.
 
Upvote 0
Anh ơi lại cho em xin lại với ah, em không chạy đc
 
Upvote 0
Web KT

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

Back
Top Bottom