การค้นหาข้อมูลด้วย VBA

การค้นหาใน Excel สามารถกดแป้น Ctrl+F เพื่อเปิดกล่องโต้ตอบที่ใช้สำหรับการค้นหา กรอกข้อมูลที่ต้องการแล้วคลิกปุ่ม Find Next หรือ Find All แล้วแต่ว่าต้องการค้นหาไปทีละค่าหรือค้นหาทั้งหมด การค้นหาดังกล่าวเป็นการวิ่งไปยังเซลล์ที่พบข้อมูลหากจะให้แสดงผลทั้งบรรทัดจำเป็นต้องใช้ VBA เข้ามาจัดการ

Video ด้านล่างนี้เป็นการสาธิตการค้นหาด้วย VBA โดยจะทำการค้นหาไปยังแต่ละเซลล์ในบรรทัดนั้น ๆ หากพบข้อมูลที่ต้องการจะแสดงขึ้นมาทั้งบรรทัด และหากไม่พบข้อมูลก็จะซ่อนบรรทัดนั้นไว้ ซึ่งได้เพิ่มความสะดวกในการค้นหาโดยการคีย์ข้อมูลที่ต้องการค้นหาแล้ว Enter โปรแกรมก็จะทำการค้นหาให้ทันที โดยตัวอย่างนี้จะมี Code 2 ชุด ชุดแรกวางที่ชีต Database เพื่อให้ทำงานทันทีหลังจากเซลล์ B1 มีการเปลี่ยนแปลงโดยไปเรียก Code ชุดที่สองที่วางที่ Module 1 ให้งานต่ออีกทอดเพื่อค้นหาข้อมูล ทำการซ่อนบรรทัดที่ไม่พบข้อมูลและแสดงบรรทัดที่พบข้อมูล ?

Code ใน Module1

Sub MyAdvancedSearch()
    Dim r As Range, v As String, s As String
    With Sheets("Database")
        .Range("a3").CurrentRegion.EntireRow.Hidden = False
        s = LCase(.Range("b1").Value)
        For Each r In .Range("a4", .Range("a" & .Rows.Count).End(xlUp))
            v = ""
            v = v & r.Value
            v = v & r.Offset(0, 1).Value
            v = v & r.Offset(0, 2).Value
            v = v & r.Offset(0, 3).Value
            v = v & r.Offset(0, 4).Value
            v = LCase(v)
            If Not v Like "*" & s & "*" Then
                r.EntireRow.Hidden = True
            End If
        Next r
    End With
End Sub

Code ในชีต Database

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B1" Then
        Call Module1.MyAdvancedSearch
    End If
End Sub

Video แสดงการค้นหาด้วย VBA