Gõ ký tự và Filter

Gõ ký tự và Filter


Bạn có một danh sách rất lớn và bạn cần sử dụng chức năng Filter của Excel để tìm kiếm. Tuy nhiên, thật sự rất mất thời gian khi mỗi lần bạn muốn filter cái gì là bạn phải bấm vào mũi tên rồi gõ vào ô Search.


36920773845_a2208c7132_o.png


Tuy nhiên, chỉ cần một vài thủ thuật VBA nho nhỏ là bạn hoàn toàn có thể khiến cho quá trình này trở nên nhanh chóng hơn.


Cách 1: Sử dụng ô làm nơi tìm kiếm

Đầu tiên, tôi sẽ tạo 1 ô để gõ ký tự cần cho Filter. Sau đó, bạn cần chọn Sheet có chứa ô đó, giả sử ở đây của tôi là Sheet1, là bởi vì tôi sẽ sử dụng sự kiện của Sheet. Tiếp theo bạn chọn Worksheet và sự kiện Change giống như hình dưới đây (vùng khoanh màu đỏ):


36920773485_68b99cf7ea_b.jpg


Kế đến, bạn hãy chép đoạn code này vào:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim EndR As Long

If Target.Address <> "$C$1" Then Exit Sub

Application.EnableEvents = False

Range("$C$3:$C$1734").AutoFilter Field:=1, Criteria1:="*" & Range("C1").Value & "*", Operator:=xlFilterValues

Application.EnableEvents = True

End Sub

Như vậy mỗi khi bạn gõ ký tự nào trong ô C1, danh sách ở dưới sẽ tự động Filter theo ký tự đó.


36920773245_a1ea2027cf_o.png


Nếu bạn để ý trên dòng code, bạn sẽ thấy một số chỗ để có thể chỉnh sửa phù hợp với mục đích của bạn, đó là:
1/ $C$1: Bạn có thể sửa lại nếu bạn muốn đặt ô để gõ tại một chỗ khác. Tuy nhiên bạn lưu ý rằng thuộc tính Address của ô sẽ lấy theo giá trị tuyệt đối, do đó ví dụ bạn muốn sửa tại A1 thì phải sửa là $A$1 nhé.
2/ Tương tự, dòng Range("$C$3:$C$1734") chính là nơi chứa danh sách để Filter. Bạn cũng có thể thay nó bằng một danh sách ở chỗ khác.


Cách 2: Tạo 1 Textbox

Nếu bạn không muốn dùng ô có sẵn của Excel vì mỗi khi gõ xong phải bấm Enter rất mất thời gian, bạn có thể sử dụng cách khác là vẽ 1 Textbox để tương tác động trực tiếp với Filter luôn. Bạn có thể làm như sau:

Vào thẻ Developer của thanh Ribbon -> Insert -> Textbox tại ActiveX Control.


36920773025_9eb9e53fb1_b.jpg


Sau đó bạn vẽ ra tại nơi bạn muốn, và rồi bạn bấm chuột phải vào nó chọn Properties.


36920772665_6a39f3abdf_o.png


Một cửa sổ sẽ hiện ra, phần Linked Cell, bạn hãy cho nó liên kết với một ô nào đó trên bảng tính. Ở đây tôi tận dụng luôn ô C1 có sẵn.


36920772415_a3e04ae98b_o.png


Kế đó, bạn nhấn đúp vào Textbox và chọn sự kiện TextBox_Change. Sau đó, bạn hãy chép đoạn code sau vào:

Mã:
Private Sub TextBox1_Change()
Range("$C$3:$C$1734").AutoFilter Field:=1, Criteria1:="*" & Range("C1").Value & "*", Operator:=xlFilterValues
End Sub

Và kết quả bạn có như sau:


36524298710_8fc93b69ce_b.jpg


Từ đây bạn có thể nhận thấy sự khác biệt giữa 2 cách chứ?

Chúc bạn thành công.
 

File đính kèm

  • Filter nhanh.xlsm
    55.9 KB · Đọc: 160
Chỉnh sửa lần cuối bởi điều hành viên:
Chào bạn,

Vấn đề thứ nhất của bạn nó còn tùy thuộc vào bạn muốn filter như thế nào. Có nghĩa là bạn muốn search và filter từng cột một hay một lúc? Muốn search một lúc? Muốn chỉ click hay gõ? ... Có rất nhiều cách, tuy nhiên đó chỉ là về mặt thủ thuật để giúp cho công việc trở nên đơn giản, tiện dụng và trông có vẻ "bắt mắt", "chuyên nghiệp" hơn thôi. Còn về code, bạn record macro về cách filter nhiều cột là sẽ thấy VBA làm như thế nào ngay.

Với vấn đề thứ hai, đây là một chủ đề được bàn rất nhiều trên GPE và cách xử lý cũng rất đa dạng, tùy thuộc vào cách bố trí dữ liệu cũng như cách xuất hiện của dữ liệu sau đó của bạn nữa (bạn muốn nó xuất hiện đè vào bảng cũ hay copy kết quả ra một chỗ khác hoặc ...). Tuy nhiên, một công thức chung của việc lọc dữ liệu đó là sử dụng Filter, Advanced Filter, PivotTable, VBA thông thường: vòng lặp, mảng,... VBA kết hợp SQL,... Trở lại câu hỏi của bạn, nếu một dữ liệu đơn thuần là text hoặc số của bạn thì sẽ đáp ứng được, nhưng với bảng tính toàn công thức thì bạn nên cân nhắc giải pháp khác.


Em chào admin ạ.

Anh ơi cho em Xin advise của anh về trường hợp: Em muốn filter nhiều hàng trong 1 cột, nghĩa là cùng là cột A nhưng em có filter dòng 1, filter dòng 2,...Vậy thì phải sửa câu lệnh như thế nào ạ? Và khi em search, em chỉ filter từng dòng một và muốn gõ tìm kiếm nhanh theo ký tự ạ.
 
Top Bottom