Views

Tìm kiếm nối dung Listbox từ Textbox trong EXCEL VBA

Cập nhật:
26 thg 2, 2022 Lúc 2/26/2022
Chuyên mục
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ụ cac 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 

Bước 1 : Tạo 1 MODEL rồi coppy code dưới vào
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 Texbot và gắn 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 : gắn thêm Sub này vào code nhớ sữa lại cột hàng dữ liệu
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

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