Tìm kiếm nối dung Listbox từ Textbox trong EXCEL VBA đơn giản dễ hiểu

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 




trong bài viết này, minh 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.

MODULE
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

TEXTBOX
  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

SUB
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

Đăng nhận xét