Xin giúp đỡ về AutoFilter bằng VBA (1 người xem)

Liên hệ QC

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

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
572
Sử dụng AutoFilter thông qua menu của Excel, theo đó các dòng không được lọc sẽ bị ẩn dòng thì em đã biết.
Em cũng đã xem một vài file mà em tải trên diễn đàn trong đó có lọc bằng VBA nhưng em vẫn chưa hiểu và không áp dụng được.
Nay em gửi file, mong các ACE trong diễn đàn giúp tạo code lọc dữ liệu giúp em.
(Trong code có giải thích ý nghĩa, tác dụng của lệnh thì tuyệt vời)
Em chân thành cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Bác cho em hỏi tiếp với: Em có file hàng ngày cần hay phải lọc dạng AutoFilter. Tuy nhiên việc xác định được ô nào được lọc, và giá trị nào được lọc em phải làm vòng vèo (nghĩ mãi mới ra). Vì cần lấy giá trị được lọc đó đưa lên trên để sử dụng.
Trong file gửi kèm đó là 2 ô tô nền đỏ. Bác xem có thể gợi ý cho em cách nào đó ít vòng vèm không ?



mình chỉ hỏi bạn một chút công thức của bạn thôi
N1=IF((VLOOKUP(1;C18:O570;13;0)=VLOOKUP(MAX(C18:C570);C18:O570;13;0));(VLOOKUP(1;C18:O570;13;0));"ABV")
bạn định dùng vba tìm ra giá trị này hả?
sau một hồi ngắm nó rất lâu thì mình hiểu là như vậy.
bạn đi tìm số hoá đơn có số thứ tự là 1 rồi so với số số hoá đơn có số thứ tự lớn nhất, đúng ko bạn?
nhưng mình cứ thắc mắt, đã là số thứ tự thì lúc nào mà nó chẳng nằm trên đâu? vậy cụm
(VLOOKUP(1;C18:O570;13;0) = N18, sao phải dùng vlookup đi tìm?
đi tìm số hoá đơn có số thứ tự lớn nhất là cụm này, thì thấy hợp lý.
VLOOKUP(MAX(C18:C570);C18:O570;13;0)).
hoặc tìm dòng cuối cùng có giá trị trong cột N bằng cthức
=INDEX(N:N; COUNTA(N:N); 1)
 
Upvote 0
mình chỉ hỏi bạn một chút công thức của bạn thôi
N1=IF((VLOOKUP(1;C18:O570;13;0)=VLOOKUP(MAX(C18:C570);C18:O570;13;0));(VLOOKUP(1;C18:O570;13;0));"ABV")
bạn định dùng vba tìm ra giá trị này hả?
sau một hồi ngắm nó rất lâu thì mình hiểu là như vậy.
bạn đi tìm số hoá đơn có số thứ tự là 1 rồi so với số số hoá đơn có số thứ tự lớn nhất, đúng ko bạn?
nhưng mình cứ thắc mắt, đã là số thứ tự thì lúc nào mà nó chẳng nằm trên đâu? vậy cụm
(VLOOKUP(1;C18:O570;13;0) = N18, sao phải dùng vlookup đi tìm?
đi tìm số hoá đơn có số thứ tự lớn nhất là cụm này, thì thấy hợp lý.
VLOOKUP(MAX(C18:C570);C18:O570;13;0)).
hoặc tìm dòng cuối cùng có giá trị trong cột N bằng cthức
=INDEX(N:N; COUNTA(N:N); 1)

Bạn chưa hiểu mục đich của mình rồi. Đây là file chứa dữ liệu liệu tổng hợp, tại ô N17 hoặc O17 tôi hay lọc để ra cái danh sách hàng hóa theo số hóa đơn (và in). Tuy nhiên sau khi lọc thì dữ liệu tại L1 và C4 cần thay đổi tương ứng (chả lẽ sửa bằng tay).
Tôi trình bày có thể khó hiểu, nhưng bạn mở lại file, tại ô N17 hoặc O17 bạn lọc rồi bạn để ý giá trị ô L1 và C4 thay đổi như thế nào.
Cách đấy tôi đang dùng chưa gặp trục trặc gì nhưng rõ ràng là rối rắm. Thế nên mới xin giải pháp gọn hơn
 
Upvote 0
Bác cho em hỏi tiếp với: Em có file hàng ngày cần hay phải lọc dạng AutoFilter. Tuy nhiên việc xác định được ô nào được lọc, và giá trị nào được lọc em phải làm vòng vèo (nghĩ mãi mới ra). Vì cần lấy giá trị được lọc đó đưa lên trên để sử dụng.
Trong file gửi kèm đó là 2 ô tô nền đỏ. Bác xem có thể gợi ý cho em cách nào đó ít vòng vèm không ?

https://dl.dropbox.com/s/ptbfpgda7l...a4Q_ZN1IwVsJo7IFzlsUiUhOWxDQ_zS8M2U4deXA&dl=1

Chẳng phải bài 15 đã xác định cột nào đang filter là gì
Bạn cứ từ code đó mà nghiên cứu đi
 
Upvote 0
Chẳng phải bài 15 đã xác định cột nào đang filter là gì
Bạn cứ từ code đó mà nghiên cứu đi

Đúng là #15 đã xác định được cột nào đang filter. Tuy nhiên ở bài này em muốn lấy giá trị được filter cơ (lấy cái Criteria). Nghĩa là khi em lọc theo số HĐ 211 thì 1 ô khác hiện: Bạn đang lọc theo giá trị 211.
Bác xem file em gửi kèm, khi lọc tại ô N17 hoặc O17, thì giá trị ô L1 và C4 thay đổi tương ứng.
(Nó đang hoạt động tốt, nhưng cách làm như trong file chỉ là vì em chưa có cách khác)
 
Upvote 0
Xóa hết mấy module ấy đi rồi copy code dưới đây vào sheet có AutoFilter
Mã:
Private Sub Worksheet_Calculate()
  Dim i As Long
  If ActiveSheet.AutoFilterMode Then
    With ActiveSheet.AutoFilter
      For i = 1 To .Filters.Count
        .Range(1, i).Interior.ColorIndex = -(.Filters(i).On) * 41
      Next
    End With
  End If
End Sub

Kính gửi Bác NDU
Từ ngày bác giúp cho các code trên, em sử dụng triệt để và thấy hoạt động rất tốt. Hàng ngày em lần lượt mở các file đang dùng để paste đoạn code trên vào từng sheet có AutoFilter.
Tuy nhiên em nhận thấy công việc paste trên cũng tương đối tốn thời gian và nhàm chán. Vậy bác thể sửa code để mỗi file chỉ cần paste 1 lần là nó chạy cho tất cả các sheet không ?? Em cũng thử vọc 1 chút nhưng không thành công
 
Upvote 0
Kính gửi Bác NDU
Từ ngày bác giúp cho các code trên, em sử dụng triệt để và thấy hoạt động rất tốt. Hàng ngày em lần lượt mở các file đang dùng để paste đoạn code trên vào từng sheet có AutoFilter.
Tuy nhiên em nhận thấy công việc paste trên cũng tương đối tốn thời gian và nhàm chán. Vậy bác thể sửa code để mỗi file chỉ cần paste 1 lần là nó chạy cho tất cả các sheet không ?? Em cũng thử vọc 1 chút nhưng không thành công

Vì code trên paste trên sheet nên nó tác dụng cho từng sheet
Sửa code lại thành vầy:
Mã:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim i As Long
  If Sh.AutoFilterMode Then
    With Sh.AutoFilter
      For i = 1 To .Filters.Count
        .Range(1, i).Interior.ColorIndex = -(.Filters(i).On) * 41
      Next
    End With
  End If
End Sub
Code này paste vào Thisworkbook nhé
 
Upvote 0
Vì code trên paste trên sheet nên nó tác dụng cho từng sheet
Sửa code lại thành vầy:
Mã:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim i As Long
  If Sh.AutoFilterMode Then
    With Sh.AutoFilter
      For i = 1 To .Filters.Count
        .Range(1, i).Interior.ColorIndex = -(.Filters(i).On) * 41
      Next
    End With
  End If
End Sub
Code này paste vào Thisworkbook nhé

Em xin chân thành cảm ơn bác
 
Upvote 0
Đúng là #15 đã xác định được cột nào đang filter. Tuy nhiên ở bài này em muốn lấy giá trị được filter cơ (lấy cái Criteria). Nghĩa là khi em lọc theo số HĐ 211 thì 1 ô khác hiện: Bạn đang lọc theo giá trị 211.
Bác xem file em gửi kèm, khi lọc tại ô N17 hoặc O17, thì giá trị ô L1 và C4 thay đổi tương ứng.
(Nó đang hoạt động tốt, nhưng cách làm như trong file chỉ là vì em chưa có cách khác)

mình cũng vừa mới tìm ra --=0, chia sẻ lại cho bạn nào có nhu cầu ...
==============
Tìm ra giá trị, điều kiện đang lọc trong 1 cột

Displaying AutoFilter criteria

tip044figure.gif
 
Upvote 0
Web KT

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

Back
Top Bottom