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.
Tìm kiếm dữ liệu trong listbox từ textbox
Trong 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.
- Hiện tại, Tinvanphong.com đang sử dụng cách tìm kiếm này cho Phần mềm xuất nhập tồn bằng Excel miễn phí 2021 bạn có xài miễn phí.
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
- Tìm kiếm nhanh dữ liệu như hình trên, ví dụ như Mã SP , Tên SP , đơn giá v.v…
- Tốc độ tìm kiếm nhanh, trên 2000 dòng đến 5000 dòng dữ liệu.
- Tìm kiếm bất kỳ đoạn text nào, trong 1 vùng dữ liệu đây.
2. HƯỚNG DẪN
- Để làm điều đó, đầu tiên bạn vào chương trình soạn thảo VBA, có 2 cách. Nhấn tổ hợp phím ALT + F11 hoặc vào DEVOLOPER -> Chọn Visual Basic
- Trong trường hợp bạn không có tab DEVOLOPER, bạn vào File chọn OPTIONS chọn CUSTOMIZE RIBBON -> chọn thẻ DEVOLOPER
Bước 1: Tạo 1 Model ( Insert -> Module ) -> copy toàn bộ code dưới vào VBA.
Option 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 Sub
Bướ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 Sub
Bước 3 : Tạo 1 LISTBOX , bạn chọn VIEW CODE Ở USERFORM.
Sau đó, 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 Sub
Maxcol : 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 DOWN
DOWN BẢN DEMO
Chú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