Lọc dữ liệu bằng code mà không dùng filter có sẵn

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào các bạn!
Mình mình mới tìm hiểu về VBA nên mình đang tự làm thử những cái mà mình tự nghĩ ra. Mình đã dùng record rồi nhưng cũng chưa biết phải khai báo chúng thế nào nên mình nhờ các bạn giúp hộ một file đính kèm để từ đó mình biết cách ứng dụng cho cái khác.
Cảm ơn các bạn.

Trên diễn đàn có đầy, sao Bạn không tìm kiếm, chỉ cần nhập "Lọc dữ liệu" thi ra nhiều. Bạn đến đây xem nhé!
https://www.giaiphapexcel.com/forum/showthread.php?42341-Advanced-Filter-c%C3%B3-n%C3%BAt-CommandButtor
Không biết có phải ý Bạn muốn lọc sang cột khác hay chỉ Filter lọc tại cột A luôn. Nếu lọc tại cột A luôn thì Bạn dùng đoạn code sau:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Set Target = Range("C1")
    With Range("A3").CurrentRegion
        .AutoFilter (1), (Target)
    End With
End Sub

www.giaiphapexcel.com/diendan/threads/l%E1%BB%8Dc-d%E1%BB%AF-li%E1%BB%87u-b%E1%BA%B1ng-code-m%C3%A0-kh%C3%B4ng-d%C3%B9ng-filter-c%C3%B3-s%E1%BA%B5n.42342/

Kỹ năng giải quyết vấn đề hiệu quả
Khóa học SprinGO phù hợp

Kỹ năng giải quyết vấn đề hiệu quả

Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...

Xem khóa học
★★★★★ 5 ★ 1 👤 4 ▥ 0
Quảng cáo

Bạn nên đọc

4 Responses

  1. hands says:

    Cho mình hỏi thêm về vấn đề lọc này với:
    Nếu ở ô C3 để trống hoặc bằng 0 thì sẽ hiện ra tất cả các nội dung (Không còn lọc nữa) thì làm thế nào ???

    Chỉnh code #2 thành.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Set Target = Range("C1")
        With Range("A3").CurrentRegion
        If Target.Value > 0 Then
            .AutoFilter (1), (Target)
        Else
            .AutoFilter
        End If
        End With
    End Sub

    Chào bạn Khương
    Mình đã xóa ở ô C3 nhưng vẫn phải một lần kích chuột ở vị trí khác hoặc enter thì mới hiện tất cả nội dung, có cách nào chỉ cần mình xóa ở ô C3 thì tự động hiện ra tất cả nội dung không mà không kích chuột ở vị trí khác hoặc enter.
    Cám ơn

    Private Sub Worksheet_Change(ByVal Target As Range)
    Set Target = Range("C1")
        With Range("A3").CurrentRegion
        If Target.Value > 0 Then
            .AutoFilter 1, Target.Value
        Else
            .AutoFilter
        End If
        End With
    End Sub
  2. hands says:

    Mình cần mở rộng hơn là liên kết lọc tự động giữa các sheet (2 sheet) thì làm cách nào bạn. Nội dụng như sau:
    1. Mình cần thay đổi vị trí B2 ở "Sheet TH" thì "sheet 1" sẽ tự động thay đổi và lọc mà không cần kích chuột (Hiện tại mình cần kích chuột thì sheet 1 mới lọc).
    2. Mình cần thay đổi vị trí B2 ở "Sheet TH" giá trị B2 bằng 0 hoặc trống thì sheet 1 tự động trả về tất cả các nội dung hiện có
    Đính kèm file.
    Cám ơn bạn rất nhiều.

    Paste vào sheet2

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then
    With Sheet1.Range("A3").CurrentRegion
        If Target.Value > 0 Then
            .AutoFilter 1, Target.Value
        Else
            .AutoFilter
        End If
    End With
    End If
    End Sub
  3. hands says:

    Chỉnh sửa giúp mình 1 chút về sheet lọc tự động này nhé vì mình cần mở rộng hơn, mình cần liên kết lọc tự động giữa các sheet (Tất cả các sheet đều lọc tự động khi thay đổi giá trị tại cột B2 của "sheet TH")
    1. Mình cần thay đổi vị trí B2 ở "Sheet TH" thì "sheet 1" ,"sheet 3" …..sẽ tự động thay đổi và lọc mà không cần kích chuột.
    2. Mình cần thay đổi vị trí B2 ở "Sheet TH",sheet 1" ,"sheet 3"…… giá trị B2 bằng 0 hoặc trống thì sheet 1 tự động trả về tất cả các nội dung hiện có
    Đính kèm file. Cám ơn nhiều nhiều
    PS: Bạn thông cảm nha vì trước đây mình chưa nói hết ý.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ws As Worksheet
    If Target.Address = "$B$2" Then
    For Each Ws In Worksheets
        If Ws.Name <> "TH" Then
        With Ws.Range("A3").CurrentRegion
            If Target.Value > 0 Then
                .AutoFilter 1, Target.Value
            Else
                .AutoFilter
            End If
        End With
        End If
    Next Ws
    End If
    End Sub
  4. hands says:

    Cám ơn bạn nhiều nhiều nhưng sheet TH vẫn chưa lọc giá trị bạn à (Sheet TH hàng A4,A5,A6 vẫn chưa lọc)

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ws As Worksheet
    If Target.Address = "$B$2" Then
    For Each Ws In Worksheets
        With Ws.Range("A3", Ws.Range("A6500").End(3))
            If Target.Value > 0 Then
                .AutoFilter 1, Target.Value
            Else
                .AutoFilter
            End If
        End With
    Next Ws
    End If
    End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm