Auto Filter Tự động Bằng Từ Cách Gõ Từ Khóa Trong VBA!

Menu Tự học VBA
  • Trang chủ
  • Diễn đàn Bài viết mới Tìm chủ đề
  • Có gì mới Bài viết mới Hoạt động mới nhất
Đăng nhập Đăng ký Có gì mới? Tìm kiếm

Tìm kiếm

Everywhere Chủ đề This forum This thread Chỉ tìm trong tiêu đề Bởi: Tìm Tìm kiếm nâng cao…
  • Bài viết mới
  • Tìm chủ đề
Menu Đăng nhập Đăng ký
  • Cách upload ảnh lên diễn đàn
  • Trang chủ
  • Diễn đàn
  • Kỹ thuật xử lý Excel
  • Thành viên tự giúp nhau
Auto Filter Tự động bằng từ cách gõ từ khóa trong VBA!
  • Thread starter thanhphuongvip
  • Ngày gửi 18/7/19
T

thanhphuongvip

Guest
Chào mọi người, mình đang sử dụng VBA để tạo cách filter tự động bằng cách gõ từ khóa ở đầu mỗi cột để lọc ra những dữ liệu thỏa mãn 1 hoặc nhiều điều kiện. Mình không biết cách làm này có tối ưu chưa, hay là còn cách nào hay hơn thì mong các bạn chỉ giáo. Giả sử mình có bảng chi tiết bán hàng, và mình muốn lọc các cột có màu xanh tương ứng đầu mỗi cột như hình: Bạn cần đăng nhập để thấy hình ảnh Khi đó mình tạo một cột phụ và dùm hàm Seach để tạo vùng điều kiện cho nó, mỗi cột cần filter là một điều kiện, như: Bạn cần đăng nhập để thấy hình ảnh và code cho sheet hiện tại sẽ là: Mã: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Target.Count > 1 Then Exit Sub If Target.Address = "$C$8" Or Target.Address = "$D$8" _ Or Target.Address = "$K$8" Or Target.Address = "$A$8" Or Target.Address = "$M$8" Then Range("A9:M65000").AdvancedFilter _ Action:=xlFilterInPlace, _ CriteriaRange:=Range("$P$7:TS$8"), Unique:=False End If Application.ScreenUpdating = True End Sub Hạn chế của cách làm này: - Chỉ lọc đc theo chuỗi, ko lọc dc theo giá trị như lớn hơn, nhỏ hơn. Ví dụ mình muốn lọc ra hóa đơn lớn hơn 5 (>5) thì không được. - Phải có các cột điều kiện phụ, rườm rà. - Khi xóa từ khóa đi thì nó ko về chế độ Showall Data vẫn còn một số cột còn ẩn, như hình: Bạn cần đăng nhập để thấy hình ảnh Để khắc phục điều này thì mình phải thêm nút Xóa Lọc ở trên với code: Mã: Sub XoaLoc_CTBH() If Sheet4.FilterMode = False Then Exit Sub Range("A8").ClearContents Range("C8").ClearContents Range("d8").ClearContents Range("k8").ClearContents Range("m8").ClearContents ActiveSheet.ShowAllData End Sub Tuy nhiên với dữ liệu vài chục ngàn dòng thì code này chạy rất chậm. Để rõ hơn các bạn xem file đính kèm: Bạn cần đăng nhập để thấy link Các bạn có cách nào hay hơn thì chỉ giáo với! Xin cảm ơn! vbano1

vbano1

SMod
Thành viên BQT Cho mình hỏi một chút nhằm làm rõ vấn đề. -Tại sao không dùng filter thông thường mà phải cho vào VBA làm gì ạ? -Mục đích của việc này nhằm làm gì, thú thực mình chưa hiểu, vì mình vẫn dùng filter bằng tay ạ. T

thanhphuongvip

Guest
vbano1 nói: Cho mình hỏi một chút nhằm làm rõ vấn đề. -Tại sao không dùng filter thông thường mà phải cho vào VBA làm gì ạ? -Mục đích của việc này nhằm làm gì, thú thực mình chưa hiểu, vì mình vẫn dùng filter bằng tay ạ. Nhấn để mở rộng...
- Cách seach bằng VBA sẽ rút ngắn rất nhiều thao tác so với các làm thông thường (chỉ cần gõ từ khóa, thay vì phải click chuột nhiều lần). - Mình học VBA đi theo hướng viết phần mềm chuyên nghiệp, nên sau này phần mềm viết ra sẽ bị ẩn hết các thanh công cụ của Excel, vì vậy người dùng thể sử dụng công cụ Excel như thông thường, mà chỉ sử dụng cách chức năng cho phép thôi, đây là ví dụ: Bạn cần đăng nhập để thấy hình ảnh S

Snow24

Guest
thanhphuongvip nói: - Cách seach bằng VBA sẽ rút ngắn rất nhiều thao tác so với các làm thông thường (chỉ cần gõ từ khóa, thay vì phải click chuột nhiều lần). - Mình học VBA đi theo hướng viết phần mềm chuyên nghiệp, nên sau này phần mềm viết ra sẽ bị ẩn hết các thanh công cụ của Excel, vì vậy người dùng thể sử dụng công cụ Excel như thông thường, mà chỉ sử dụng cách chức năng cho phép thôi, đây là ví dụ: Bạn cần đăng nhập để thấy hình ảnh Nhấn để mở rộng...
Bạn thử với file tầm 2000 dòng là thấy không chạy được rồi lag lắm.Bạn có thể làm trên form nó sẽ nhanh và tiện hơn nhé. T

thanhphuongvip

Guest
Snow24 nói: Bạn thử với file tầm 2000 dòng là thấy không chạy được rồi lag lắm.Bạn có thể làm trên form nó sẽ nhanh và tiện hơn nhé. Nhấn để mở rộng...
Đúng là vậy, nên mình mới hỏi xem anh em có code nào hay chia sẻ với, tại trình mình tới đó thôi :D S

Snow24

Guest
thanhphuongvip nói: Đúng là vậy, nên mình mới hỏi xem anh em có code nào hay chia sẻ với, tại trình mình tới đó thôi :D Nhấn để mở rộng...
Bạn làm trên form đó tìm kiếm trên đó nó vừa nhanh.Lại không bị hỏng dữ liệu của mình. T

thanhphuongvip

Guest
Snow24 nói: Bạn làm trên form đó tìm kiếm trên đó nó vừa nhanh.Lại không bị hỏng dữ liệu của mình. Nhấn để mở rộng...
Cảm ơn Snow, mình vẫn chưa biết làm trên UserForm. Snow có thể chỉ cho mình một code như bảng trên, để sau này nếu có áp dụng với bảng khác nữa đc ko? Trong code cùng 1 lệnh tìm kiếm trong nhiều cột do mình chỉ định. tuhocvba

tuhocvba

Administrator
Thành viên BQT Vấn đề bạn muốn hỏi: Làm sao để tăng tốc độ lọc. Mình đề cử access. Nó lọc vô đối nhanh luôn. Cụ thể về giải pháp: Mình nghĩ bạn hãy thử sử dụng kết hợp excel và access. Trong đó access lưu trữ dữ liệu, đóng vai trò là database. Excel đóng vai trò giao diện, dùng để truy vấn tới cơ sở dữ liệu. Cụ thể nên sử dụng UserForm để hiển thị. Data lấy từ access và load lên userform của excel. Sẽ tốn công tốn sức thiết kế giao diện UserForm một chút, nhưng đẹp và gọn gàng. Access lưu trữ cũng chả khác gì excel, cho nên việc này sẽ không làm khó bạn. Đừng ngại dùng cái mới. Trên diễn đàn cũng đã có hướng dẫn rồi. Về code: Câu lệnh truy vấn cơ sở dữ liệu cực gọn và mạnh. Không dài dòng lôi thôi như code VBA. File excel bạn giữ lại để tận dụng Userform hiện tại. Vậy bạn cần: 1. Tìm đọc các bài trong box Access và thực hành theo, mình nghĩ chừng đó đủ để bạn làm bất cứ cái gì bạn muốn. 2. Xây dựng ý tưởng muốn hiển thị cái gì -> Tạo UserForm trên excel. => Kết nối excel với access để lấy dữ liệu và hiển thị trên UserForm. Trong box acess đã nói đủ rồi. Về code: Mình không có nhận xét gì. +) Thú thực là lệnh Filter mình dùng đúng một lần trong VBA, và không nhìn thấy tác dụng to lớn của nó. Dễ sai sót nếu trong vùng data có dòng trống, mà điều này mình không kiểm soát được. Code rườm rà so với VBA tác động lọc trên access. T

thanhphuongvip

Guest
vbano1 nói: Mình thấy file của bạn @thanhphuongvip sử dụng khá nhiều UserForm. Vì vậy, mình không nghĩ là @thanhphuongvip cần trợ giúp gì về UserForm. Mình nhìn thấy một vấn đề là, các chức năng khá rườm rà. Có lẽ P cần xem lại thiết kế: Cụ thể, muốn làm cái gì, muốn hiển thị cái gì, trong ô hiển thị ấy có những thao tác nào, với mỗi thao tác, sự kiện nào sẽ xảy ra, mỗi sự kiện xảy ra thì thông báo như thế nào. Đầu tiên đi từ tổng quan, chương trình sẽ có những chức năng gì. Rồi ứng với mỗi chức năng sẽ tương ứng giao diện như thế nào. -> Đi vào cụ thể, trên giao diện ấy có những nút bấm nào -> Nút bấm ấy có chức năng gì Trong quá trình code chức năng nào đó, nếu không biết thì hỏi. Thường một chương trình nếu mất 7 ngày làm, thì 5 ngày thiết kế, và chỉ mất 1 ngày code, 1 ngày test lại thôi. Thời gian thiết kế thường mất nhiều thời gian nhất, nhưng nếu thiết kế chỉn chu, thì việc code sẽ rất nhanh. Vừa nghĩ, vừa làm, thì các chức năng sẽ lan man, và rối loạn. Đây chưa phải là một chương trình tốt nhất, nhưng nó có hàm ý, muốn làm thì bạn phải thiết kế, rồi trình cái thiết kế đó ra thì ai cũng hiểu được. Còn đọc code, cực kỳ nhức mắt luôn ấy. Bạn cần đăng nhập để thấy link Nhấn để mở rộng...
Thật ra UserForm trong file là mình cũng nhờ vả cả, sau đó mình áp dụng rập khuôn vào file khác chứ thật sự chưa hiểu hết code trong đó, đang học từ từ, thấm dần dần. hihi S

Snow24

Guest
vbano1 nói: Thế thì chưa cần code nhanh, cứ code chạy được và chạy đúng ý mình đã. Mình cũng có khoảng thời gian như vậy, lắp ghép lại để chạy theo đúng ý mình. Vậy bạn cứ thong thả xem video cho người mới bắt đầu, không cần vội. Chậm mà chắc (không từ bỏ đam mê và hứng thú với VBA) là được. Nhấn để mở rộng...
Bạn cho mình xin code sửa dữ liệu từ excel vào accsee.Mình đang làm với ADO nhưng mới nên nhiều chỗ khó hiểu quá.Bạn có tài liệu không giới thiệu mình với.
thanhphuongvip nói: Thật ra UserForm trong file là mình cũng nhờ vả cả, sau đó mình áp dụng rập khuôn vào file khác chứ thật sự chưa hiểu hết code trong đó, đang học từ từ, thấm dần dần. hihi Nhấn để mở rộng...
Còn vấn đề của bạn thì bạn có thể dùng mảng trong VBA là được à. Bạn phải đăng nhập hoặc đăng ký để bình luận. Chia sẻ: Facebook Twitter WhatsApp Email Link
  • Trang chủ
  • Diễn đàn
  • Kỹ thuật xử lý Excel
  • Thành viên tự giúp nhau
Top

Từ khóa » Filter Bằng Vba