Khi làm việc trong Excel, bạn thường hay phải lọc, tìm kiếm dữ liệu. Việc này đôi khi khiến bạn mất nhiều thời gian khi phải thao tác thủ công bằng tay. Hôm nay, Tinvanphong.com xin chia sẽ cho bạn cách tạo, tìm kiếm dữ liệu trong listbox từ textbox. Trong bài viết này, Tinvanphong.com sẽ giới thiệu đến các bạn cách tìm kiếm và lọc dữ liệu tự động, khi bạn nhập vào một ô trong Excel bằng VBA. Bạn cũng có thể tải file mẫu ở cuối bài viết. Hãy cùng tìm hiểu ngay nào. Nội dung chính
Tìm kiếm dữ liệu trong listbox từ textboxTrong quá trình làm việc với Excel, mình có gặp một số trường dò tìm giá trị của 1 mảng dữ liệu này đó hoặc muốn nhập liệu nhanh ví dụ các mã hàng, hoặc các nội dung liên quan đến tìm kiếm. Hôm nay mình share các bạn cách tạo 1 hộp tìm kiếm dựa trên USERFORM. Tìm kiếm dữ liệu trong listbox từ textbox
Bạn có thể sử dụng tìm kiếm này, chuyển dữ liệu muốn tìm kiếm vào Sheet bạn muốn nhập liệu, giúp chúng ta nhập liệu nhanh và chính xác cũng như hiệu quả hơn. 1. CÔNG DỤNG
2. HƯỚNG DẪN
Bước 1: Tạo 1 Model ( Insert -> Module ) -> copy toàn bộ code dưới vào VBA. Tìm kiếm dữ liệu trong listbox từ textboxOption Explicit Option Compare Text Public ArrayData, MaxRow&, MaxCol%, TempArr() Public Sub faytLstBxMultiCol(strSearchTxt$, _ ListBox As MSForms.ListBox) '--------------------------------------------------------------------------------- '# Code tim kiem nhieu cot trong Listbox. '# Tac gia: HeSanbi - GPE '--------------------------------------------------------------------------------- On Error Resume Next '----------------------------- [ bãy lôi ] Dim I&, J%, r& For I = 1 To MaxRow For J = 1 To MaxCol: If ArrayData(I, J) Like "*" & strSearchTxt & "*" Then GoTo AddArr: Next If False Then AddArr: r = r + 1 For J = 1 To MaxCol TempArr(r, J) = ArrayData(I, J) If J = 5 And TempArr(r, J) >= 1000 Then _ TempArr(r, J) = (ArrayData(I, J)) Next End If Next With ListBox .Clear: .AddItem If r = 0 Then GoTo EH_Exit ReDim result(1 To r, 1 To MaxCol) GoSub TranTempArr: .List = result End With EH_Exit: Exit Sub TranTempArr: For I = 1 To r: For J = 1 To MaxCol: result(I, J) = TempArr(I, J): Next J, I Return End SubBước 2 : Tạo 1 USERFORM -> Tạo 1 TEXTBOX chọn View Code -> Copy code dưới vào. Private Sub TextBox1_Change() ' khi tim bat dau tim kiem thi call du lieu trong texbox Call faytLstBxMultiCol(Me.TextBox1.Value, Me.ListBox1) End SubBước 3 : Tạo 1 LISTBOX , bạn chọn VIEW CODE Ở USERFORM. Tìm kiếm dữ liệu trong listbox từ textboxSau đó, các bạn copy đoạn Code này vào. Sub ganSourceListbox() On Error Resume Next With Sheet1.Range("A1") MaxCol = Sheet1.Range("A1").End(xlToRight).Column '--- hàng MaxRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row - 1 '---- c?t ArrayData = .Resize(MaxRow, MaxCol).Value End With ReDim TempArr(1 To MaxRow, 1 To MaxCol) ListBox1.List = ArrayData End SubMaxcol : là tiêu đề bảng dữ liệu ( xác định có bao nhiêu cột dữ liệu ). MaxRow : là lấy số hàng cuối cùng của bảng dữ liệu. Listbox1 : là tên của listbox bạn mới tạo. Bước 4: Bạn cần copy đoạn Code dưới này vào, ở đây khi userform khởi chạy thì đồng thời gắn dữ liệu vào Private Sub UserForm_Initialize() Call ganSourceListbox End Sub 3 LINK DOWNDOWN BẢN DEMOChúc các bạn thành công, các bạn có thể comment phía dưới hoặc liên hệ admin thể giúp trả lời thắc mắc cho bạn nhanh nhất có thể. Tham khảo thêm các bài viết. Chuyển đổi số thành chữ viết bằng Code VBA Tạo phạm vi nhập liệu cho Textbox trong VBA 5/5 - (1 bình chọn) |