Cara Membuat Filter Pencarian Otomatis di Sheet Excel dengan VBA (Lengkap + Placeholder & ESC Reset)

Cara Membuat Filter Pencarian Otomatis di Sheet Excel dengan VBA

basoways Apakah Anda sering kesulitan mencari data tertentu di tabel Excel yang panjang? Biasanya kita menggunakan Filter manual, tapi cara ini kurang praktis jika harus berulang kali mengetik kata kunci.
Dengan bantuan VBA (Visual Basic for Applications), kita bisa membuat fitur pencarian otomatis di Excel seperti kotak pencarian modern: cukup ketik di satu sel, maka data akan otomatis terfilter.

Pada artikel ini, saya akan membagikan tutorial lengkap step-by-step untuk membuat filter pencarian otomatis di Excel menggunakan VBA, dengan fitur tambahan:

  • Placeholder (teks abu-abu “Ketik untuk mencari…”)
  • Reset otomatis jika kotak pencarian kosong
  • Pesan error jika data tidak ditemukan
  • Shortcut ESC untuk reset instan

Manfaat Fitur Ini

  • 🔎 Pencarian data yang cepat dan akurat
  • 📊 Tampilan data lebih rapi karena hanya menampilkan hasil pencarian
  • ⏳ Hemat waktu tanpa perlu filter manual berulang-ulang
  • 🖥️ User Experience lebih modern seperti aplikasi

Persiapan

  • Gunakan Excel versi 2010 ke atas (lebih baik jika 2016/365).
  • Pastikan Macro/VBA diaktifkan.
  • Data sudah berbentuk tabel sederhana dengan header di baris ke-6 dan data mulai baris ke-8 (kolom B sampai S).

Langkah-Langkah Membuat Filter Pencarian di Excel dengan VBA

1. Masuk ke VBA Editor

  • Tekan ALT + F11 untuk membuka VBA Editor.
  • Pilih ThisWorkbook di Project Explorer.

2. Masukkan Kode VBA Lengkap

Salin dan tempel kode VBA berikut ke dalam modul ThisWorkbook:


Private Sub Workbook_Open()
    ' Saat workbook dibuka, set placeholder di F4 setiap sheet bulan
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Name
            Case "JAN", "FEB", "MAR", "APR", "MEI", "JUN", _
                 "JUL", "AGT", "SEP", "OKT", "NOV", "DES"
                With ws.Range("F4")
                    .Value = "Ketik untuk mencari..."
                    .Font.Color = RGB(150, 150, 150) ' abu-abu
                    .Interior.Color = RGB(242, 242, 242) ' fill abu-abu muda
                End With
        End Select
    Next ws
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Jika klik F4 dan masih placeholder, hapus teks dan ubah font jadi hitam
    On Error Resume Next
    If Not Intersect(Target, Sh.Range("F4")) Is Nothing Then
        If Sh.Range("F4").Value = "Ketik untuk mencari..." Then
            Application.EnableEvents = False
            With Sh.Range("F4")
                .ClearContents
                .Font.Color = RGB(0, 0, 0)
                .Interior.ColorIndex = xlNone
            End With
            Application.EnableEvents = True
        End If
    End If
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' Event utama untuk menjalankan filter berdasarkan F4
    On Error GoTo SafeExit
    
    Dim rngData As Range, rngCriteria As Range
    Dim LastRow As Long
    Dim sCriteria As String
    Dim rngVisible As Range
    
    ' Batasi hanya untuk sheet bulan
    Select Case Sh.Name
        Case "JAN", "FEB", "MAR", "APR", "MEI", "JUN", _
             "JUL", "AGT", "SEP", "OKT", "NOV", "DES"
        Case Else
            Exit Sub
    End Select
    
    Set rngCriteria = Sh.Range("F4")
    If Intersect(Target, rngCriteria) Is Nothing Then Exit Sub
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    sCriteria = LCase(Trim(rngCriteria.Value))
    
    ' Jika kosong → reset filter + placeholder balik
    If sCriteria = "" Then
        If Sh.AutoFilterMode Then Sh.AutoFilterMode = False
        With rngCriteria
            .Value = "Ketik untuk mencari..."
            .Font.Color = RGB(150, 150, 150)
            .Interior.Color = RGB(242, 242, 242)
        End With
        GoTo SafeExit
    End If
    
    ' Jika ada teks → filter jalan, font hitam
    With rngCriteria
        .Font.Color = RGB(0, 0, 0)
        .Interior.ColorIndex = xlNone
    End With
    
    LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row
    If LastRow < 8 Then GoTo SafeExit
    
    Set rngData = Sh.Range("B6:S" & LastRow)
    
    If Not rngData.Parent.AutoFilterMode Then rngData.AutoFilter
    rngData.AutoFilter Field:=2, Criteria1:="*" & sCriteria & "*"
    
    On Error Resume Next
    Set rngVisible = rngData.Offset(1, 0).Resize(rngData.Rows.Count - 1, rngData.Columns.Count).SpecialCells(xlCellTypeVisible)
    On Error GoTo SafeExit
    
    ' Jika data tidak ditemukan → reset + pesan
    If rngVisible Is Nothing Then
        MsgBox "Data tidak ditemukan untuk: " & rngCriteria.Value, vbExclamation, "Pencarian"
        Sh.AutoFilterMode = False
        With rngCriteria
            .Value = "Ketik untuk mencari..."
            .Font.Color = RGB(150, 150, 150)
            .Interior.Color = RGB(242, 242, 242)
        End With
    End If
    
SafeExit:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Private Sub Workbook_SheetBeforeKeyDown(ByVal Sh As Object, ByVal KeyCode As Integer, ByVal Shift As Integer, Cancel As Boolean)
    ' Tekan ESC untuk reset langsung
    If KeyCode = vbKeyEscape Then
        If Sh.Name Like "JAN" Or Sh.Name Like "FEB" Or Sh.Name Like "MAR" Or _
           Sh.Name Like "APR" Or Sh.Name Like "MEI" Or Sh.Name Like "JUN" Or _
           Sh.Name Like "JUL" Or Sh.Name Like "AGT" Or Sh.Name Like "SEP" Or _
           Sh.Name Like "OKT" Or Sh.Name Like "NOV" Or Sh.Name Like "DES" Then
            
            If Not Intersect(Sh.Range("F4"), Sh.Selection) Is Nothing Then
                Application.EnableEvents = False
                If Sh.AutoFilterMode Then Sh.AutoFilterMode = False
                With Sh.Range("F4")
                    .Value = "Ketik untuk mencari..."
                    .Font.Color = RGB(150, 150, 150)
                    .Interior.Color = RGB(242, 242, 242)
                End With
                Application.EnableEvents = True
                Cancel = True ' hentikan efek default ESC
            End If
        End If
    End If
End Sub

3. Simpan & Uji Coba

  • Simpan file dengan ekstensi .xlsm (Macro-Enabled Workbook).
  • Tutup lalu buka kembali file Excel Anda.
  • Coba ketik di F4 → data otomatis terfilter berdasarkan kolom C.
  • Hapus isi F4 → filter hilang & placeholder kembali.
  • Jika data tidak ada → muncul pesan.
  • Tekan ESC di F4 → reset instan.

Hasil yang Didapat

  • 🔎 Kotak pencarian otomatis di Excel (sel F4)
  • 📝 Placeholder dengan teks abu-abu
  • 🚫 Pesan error saat data tidak ditemukan
  • ↩️ Reset otomatis dengan ESC

Kesimpulan

Membuat filter pencarian otomatis di Excel dengan VBA sangat bermanfaat untuk mempercepat analisis data.
Dengan tambahan fitur placeholder dan ESC reset, pengalaman pengguna menjadi jauh lebih baik.

Silakan salin kode VBA di atas dan terapkan di file Excel Anda. Hasilnya, Anda akan memiliki kotak pencarian ala aplikasi modern langsung di dalam Excel 🚀

👉 Dokumentasi VBA Microsoft

Cara Membuat Pencarian Otomatis di Excel dengan VBA (Lengkap + Contoh Sheet1)

80%
Awesome
  • Design
Leave A Reply

Your email address will not be published.