Cara Membuat Pencarian Otomatis di Excel dengan VBA
basoways Mengelola data dalam jumlah besar di Excel sering membuat kita kesulitan mencari informasi tertentu. Biasanya, kita menggunakan fitur filter manual. Namun, dengan bantuan VBA (Visual Basic for Applications), kita bisa membuat pencarian otomatis di Excel yang lebih cepat, praktis, dan terlihat profesional.
Artikel ini membahas cara membuat pencarian otomatis di Excel untuk 1 sheet saja (contoh: Sheet1) lengkap dengan kode VBA, flowchart, dan keterangan detail agar mudah dipahami.
Struktur Data untuk Contoh Sheet1
- Sheet yang digunakan: Sheet1.
- Kolom data: mulai dari B6 sampai S (header ada di baris 6).
- Kolom pencarian: F4.
- Kata kunci pencarian: akan mencocokkan isi di kolom C mulai dari baris 8.
Hasil yang Akan Dicapai
- Saat file dibuka → sel F4 otomatis terisi placeholder: “Ketik untuk mencari…” dengan font abu-abu.
- Saat F4 diklik → placeholder langsung hilang, siap untuk diketik.
- Saat user mengetik kata kunci → tabel otomatis terfilter sesuai teks di kolom C.
- Saat isi F4 dihapus → filter hilang, placeholder kembali muncul.
- Jika data tidak ditemukan → pesan akan muncul dan placeholder kembali aktif.
Flowchart Logika Program
graph TD
A[Workbook Open] --> B[Set placeholder di F4]
B --> C[User klik F4]
C --> D{Apakah masih placeholder?}
D -- Ya --> E[Hapus placeholder, siap input]
D -- Tidak --> F[Biarkan]
E --> G[User mengetik kata kunci]
G --> H{Apakah kosong?}
H -- Ya --> I[Reset filter & tampilkan placeholder]
H -- Tidak --> J[Filter data di kolom C]
J --> K{Ada hasil?}
K -- Ya --> L[Tampilkan hasil filter]
K -- Tidak --> M[Pesan: Data tidak ditemukan]
M --> I
Kode VBA Lengkap dengan Keterangan
Salin kode berikut ke dalam ThisWorkbook di VBA Editor (ALT+F11 → Microsoft Excel Objects → ThisWorkbook).
' === Inisialisasi Placeholder Saat Workbook Dibuka ===
Private Sub Workbook_Open()
With ThisWorkbook.Sheets("Sheet1").Range("F4")
.Value = "Ketik untuk mencari..." ' Placeholder default
.Font.Color = RGB(150, 150, 150) ' Font abu-abu
.Interior.Color = RGB(242, 242, 242) ' Background abu-abu terang
End With
End Sub
' === Menghapus Placeholder Saat F4 Diklik ===
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
' Jalankan hanya di Sheet1
If Sh.Name <> "Sheet1" Then Exit Sub
' Jika user klik F4
If Not Intersect(Target, Sh.Range("F4")) Is Nothing Then
' Jika masih placeholder, hapus & ubah font jadi normal
If Sh.Range("F4").Value = "Ketik untuk mencari..." Then
Application.EnableEvents = False
With Sh.Range("F4")
.ClearContents
.Font.Color = RGB(0, 0, 0) ' Font hitam normal
.Interior.ColorIndex = xlNone ' Hilangkan background
End With
Application.EnableEvents = True
End If
End If
End Sub
' === Logika Pencarian Otomatis ===
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo SafeExit
Dim rngData As Range, rngCriteria As Range
Dim LastRow As Long
Dim sCriteria As String
Dim rngVisible As Range
' Jalankan hanya di Sheet1
If Sh.Name <> "Sheet1" Then Exit Sub
Set rngCriteria = Sh.Range("F4") ' Sel input pencarian
If Intersect(Target, rngCriteria) Is Nothing Then Exit Sub
Application.EnableEvents = False
Application.ScreenUpdating = False
sCriteria = LCase(Trim(rngCriteria.Value))
' === Jika kosong → reset filter & tampilkan placeholder ===
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 pencarian ===
With rngCriteria
.Font.Color = RGB(0, 0, 0)
.Interior.ColorIndex = xlNone
End With
' Cari baris terakhir di kolom C
LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row
If LastRow < 8 Then GoTo SafeExit
' Range data dari header baris 6 sampai baris terakhir
Set rngData = Sh.Range("B6:S" & LastRow)
' Jika filter belum aktif, aktifkan
If Not rngData.Parent.AutoFilterMode Then rngData.AutoFilter
' Filter berdasarkan isi kolom C (Field:=2 berarti kolom C)
rngData.AutoFilter Field:=2, Criteria1:="*" & sCriteria & "*"
' Cek apakah ada data yang muncul
On Error Resume Next
Set rngVisible = rngData.Offset(1, 0).Resize(rngData.Rows.Count - 1, rngData.Columns.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo SafeExit
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
Bagian yang Bisa Diganti
- Nama Sheet → Saat ini hanya berlaku untuk
Sheet1
. Ubah sesuai kebutuhan. - Sel Pencarian → Default
F4
. Jika ingin pindah, ubah semuaRange("F4")
. - Kolom Acuan Pencarian → Default kolom C (Field:=2). Bisa diubah ke kolom lain.
- Teks Placeholder → Bisa diganti sesuai keinginan.
Cara Menggunakan
- Buka workbook, lalu masuk ke VBA Editor (Alt + F11).
- Klik dua kali ThisWorkbook di bagian Microsoft Excel Objects.
- Paste seluruh kode di atas.
- Simpan file sebagai Macro-Enabled Workbook (.xlsm).
- Tutup dan buka kembali workbook Anda.
- Coba klik sel F4, ketik kata kunci, dan lihat hasil pencarian otomatis.
FAQ (Pertanyaan yang Sering Diajukan)
Q: Apakah kode ini bisa digunakan di semua sheet Excel?
A: Bisa, cukup ubah nama sheet di kode VBA sesuai kebutuhan.
Q: Apakah harus menyimpan file sebagai .xlsm?
A: Ya, agar kode VBA dapat dijalankan.
Q: Apakah hanya bisa mencari di kolom C saja?
A: Tidak, Anda bisa ganti bagian Field:=2
ke kolom lain sesuai kebutuhan.
Referensi Eksternal
Penutup
Dengan kode ini, Anda sudah bisa menambahkan fitur pencarian instan dengan placeholder di 1 sheet saja. Cocok jika hanya ada 1 tabel utama atau ingin mencoba sebelum mengembangkan ke banyak sheet.
Semoga bermanfaat 🚀
- Design