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