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

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

  1. Saat file dibuka → sel F4 otomatis terisi placeholder: “Ketik untuk mencari…” dengan font abu-abu.
  2. Saat F4 diklik → placeholder langsung hilang, siap untuk diketik.
  3. Saat user mengetik kata kunci → tabel otomatis terfilter sesuai teks di kolom C.
  4. Saat isi F4 dihapus → filter hilang, placeholder kembali muncul.
  5. 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

  1. Nama Sheet → Saat ini hanya berlaku untuk Sheet1. Ubah sesuai kebutuhan.
  2. Sel Pencarian → Default F4. Jika ingin pindah, ubah semua Range("F4").
  3. Kolom Acuan Pencarian → Default kolom C (Field:=2). Bisa diubah ke kolom lain.
  4. Teks Placeholder → Bisa diganti sesuai keinginan.

Cara Menggunakan

  1. Buka workbook, lalu masuk ke VBA Editor (Alt + F11).
  2. Klik dua kali ThisWorkbook di bagian Microsoft Excel Objects.
  3. Paste seluruh kode di atas.
  4. Simpan file sebagai Macro-Enabled Workbook (.xlsm).
  5. Tutup dan buka kembali workbook Anda.
  6. 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

👉 Dokumentasi VBA Microsoft


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 🚀

80%
Awesome
  • Design
Leave A Reply

Your email address will not be published.