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 🚀
Cara Membuat Pencarian Otomatis di Excel dengan VBA (Lengkap + Contoh Sheet1)
- Design