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.
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 đỏ):
Kế đến, bạn hãy chép đoạn code này vào:
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ự đó.
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.
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.
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.
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:
Và kết quả bạn có như sau:
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.
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.

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 đỏ):

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ự đó.

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.

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.

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.

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:

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
Chỉnh sửa lần cuối bởi điều hành viên: