Code để lọc theo nhiều điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Trước mình có tìm trên diễn đàn, thấy được code xử lý lọc nhiều điều kiện như mã đơn hàng, số lượng mà mình cho là hay.
Bạn xem tham khảo thử.
 
3 là dùng kế "Thay mận đổi đào".
Ngày nay, không ai chịu chết thay ai đâu.
Bạn đổi thành "thay kép đổi đào" hợp với thời cuộc hơn.

Vậy tức là không có cách nào advanced filter dạng ngày Việt Nam luôn trong code hả bác? Chỉ có thể:
1 là phải dùng ngày kiểu Mỹ.
2 là phải dùng 2 bảng điều kiện.
3 là hết cách...
Lại cái tội đọc không kỹ. Người ta nói "mặt nạ" là ẩn ý từ "format". Format ra text tức là chụp mặt nạ cho trị.
Ngày trong Excel là dạng số. Chả cần kiểu mẽo hay âu gì để nó thay thế.
Tuy nhiên, khi so cánh ngày tháng qua format thì dùng kiểu Nhật tốt nhất:
Format(ngày, "yyyymmdd")
Nhật là chúa tể về mặt nạ mờ.
 
Xã hội bây giờ cũng vậy thôi, ai cũng có ít nhất một cái mặt nạ.
Không xái mặt nạ thì cũng còn cách khác mà mắt người ta:
Của để trưng là hàng giả, vô giá trị (với code)
Khi cần chạy code thì gắn đồ hữu dụng vào range. Chạy code xong lại gắn của giả vào.
Nói chung nếu không biết chẳng thà luồn lách chứ toàn mày mò những thứ không thể.
Phương án giấu là sau cùng, trước tiên có cách nào cho vào criteria không bác?
Vậy tức là không có cách nào advanced filter dạng ngày Việt Nam luôn trong code hả bác?
Những câu hỏi thật là không muốn trả lời chút nào. Nếu có thì người ta đã trả lời từ tám hoánh.
 
Bài 30 tôi chỉ cách này thì chê xấu
Tôi bảo giấu đi thì bảo không trực quan.
Té ra con người này sống và đánh giá lẫn nhau qua cái mẽ ngoài chứ không phải cái thực lực hiệu quả.
Vậy mà bài 39 bảo dùng mặt nạ thì ra vẻ ta đây không chịu.
 
Em tổng hợp lại 4+1 cách:

Cách 1:

Như ảnh sau thì VBA chạy tốt, kể range và name.
1725986462547.png

Cách 2:
1725986638383.png

Cách 3:
code xử lý lọc nhiều điều kiện
Code này rất hay, hiện tại đáp ứng bài này, tuy nhiên có chút tớ cảm giác chưa tối ưu và hơi khó dùng:
- 1 là ghi ra điều kiện filter dễ sai sót khi phải thật kỹ đúng quy tắc, khi cần sửa thì phải dò kỹ cũng chưa tối ưu, nếu tác giả sửa code mà dùng chính criteria của advanced filter thì nhanh chóng gọn lẹ hơn.
1725987021699.png
- 2 là như ảnh dưới:1725987184988.png

Cách 4:
Có lẽ là cách mà bác Mỹ, bác Thắng, bác Vet nhắc đến, gọi là "hoa quả" gì đó. Nó như thế này:

Mã:
Sub zzz3()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim arr()
Dim dong, cot
arr = Range("_LOCC4").Value
For dong = LBound(arr, 1) + 1 To UBound(arr, 1)
      For cot = LBound(arr, 2) To UBound(arr, 2)
         If arr(dong, cot) <> "" Then
            arr(dong, cot) = Left(arr(dong, cot), 2) & CLng(CDate(Mid(arr(dong, cot), 3, 10)))
         End If
      Next cot
Next dong
Sheets.Add(AFTER:=ActiveSheet).Name = "TEMP"
Sheets("TEMP").Range("a1").Resize(dong - 1, cot - 1) = arr
Sheets("C4").Range("_BANGC4").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets("TEMP").Range("a1").CurrentRegion, Unique:=False
Sheets("TEMP").Delete
Sheets("C4").Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Cách 5: Format(ngày, "yyyymmdd"): cái này đưa vào code em không biết làm, 2 bác đề cập đến nó có thể code giúp em không?
 

File đính kèm

Lần chỉnh sửa cuối:
Trước mình có tìm trên diễn đàn, thấy được code xử lý lọc nhiều điều kiện như mã đơn hàng, số lượng mà mình cho là hay.
Bạn xem tham khảo thử.
Cảm ơn bạn nhiều nhé, mình đã xem qua, có thể áp dụng được vào file của mình.
 
Còn 1 cách mà với người ưa cái mẽ bề ngoài gọi là xấu

1726018058686.png

Cách 3:
...

Cách 4:
Có lẽ là cách mà bác Mỹ, bác Thắng, bác Vet nhắc đến, gọi là "hoa quả" gì đó.
Cách 2: Xấu không biết giấu đi à?
Cách 3 tôi không thèm quan tâm vì cả đống code chẳng làm được gì. Chưa chắc đã làm đúng như trong link.
Cách 4: Cần quái gì cái sheet Temp
 
Còn 1 cách mà với người ưa cái mẽ bề ngoài gọi là xấu




Cách 2: Xấu không biết giấu đi à?
Cách 3 tôi không thèm quan tâm vì cả đống code chẳng làm được gì. Chưa chắc đã làm đúng như trong link.
Cách 4: Cần quái gì cái sheet Temp
Còn 1 cách mà với người ưa cái mẽ bề ngoài gọi là xấu: → Hình như bác tạo cột phụ, như thế thì không cần thiết, em chỉ muốn có từng đó cột thôi, ví dụ em cần thêm dữ liệu tầm 50 cột nữa thì lúc sai tìm cột FALSE TRUE sửa thì lâu lắm.

Cách 2: Xấu không biết giấu đi à? → giấu cũng được nhưng vẫn xấu, thậm chí cái bảng em làm cũng đang xấu, và em không muốn xấu thêm nữa.

Cách 3 tôi không thèm quan tâm vì cả đống code chẳng làm được gì. Chưa chắc đã làm đúng như trong link. → sheet KQ bên cạnh là chạy hàm khủng đó bác, hàm rất hay nhưng nếu điều kiện có thể nhập đơn giản hơn thì hợp ý em hơn. Tuy nhiên, có thể hàm nằm trong thư viện của tác giả nên phải dùng chuỗi lọc như thế. Do đó, là 1 hướng tiếp cận khác.

Cách 4: Cần quái gì cái sheet Temp → sheet mới hay sheet hiện tại thì cũng như nhau. Cái quan trọng là advanced filter của excel nó xịn hơn của VBA.

Thêm: còn ý format trong code, vẫn phải gán xuống sheet rồi filter đúng không bác?
 
Còn 1 cách mà với người ưa cái mẽ bề ngoài gọi là xấu: → Hình như bác tạo cột phụ
Cách của tôi KHÔNG dùng cột phụ.
Cách 4: Hiểu sai ý bài 44.
Ngoài ra tôi không trả lời thêm. Trừ khi tôi dùng đúng cách bài 44 và bạn chuyển cho tài khoản GPE 1 khoản tương đương với "bài khó" cho việc thiện nguyện.
Tôi xác định "khó" vì bạn làm cả 2 tuần không xong.
 
Nói không bằng làm. Hề hề không giải quyết được vấn đề.
 
"Thay mận đổi đào" chỉ cần làm vầy thôi, muốn giấu thì đưa vô name.
Mã:
    Range("H1").Value = "yyyy/mm/dd"
    'AdvancedFilter
    Range("H1").Value = "dd/mm/yyyy"
1726026578710.png
 
"Thay mận đổi đào" chỉ cần làm vầy thôi, muốn giấu thì đưa vô name.
Mã:
    Range("H1").Value = "yyyy/mm/dd"
    'AdvancedFilter
    Range("H1").Value = "dd/mm/yyyy"
View attachment 303894
Ồ, thế mà em không nghĩ ra được. Chán quá, thiệt tình tư duy mình kém quá.
Xin cảm ơn bác nhé, thiện nguyện em xin phép dành dịp khác vậy. Hề hề.
 
Web KT

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

Back
Top Bottom