Metode
Findmerupakan salah satu cara tercepat untuk mencari data di VBA Excel. Dengan beberapa baris kode, Anda dapat menemukan sel yang berisi nilai tertentu tanpa harus memeriksa setiap baris menggunakan perulangan.
Namun, bagaimana jika data yang dicari muncul lebih dari satu kali?
Sebagai contoh, nama Andi muncul pada beberapa baris dalam sebuah tabel. Jika hanya menggunakan Find, VBA hanya akan menemukan kemunculan pertama.
Untuk menemukan seluruh data yang cocok, Anda perlu menggabungkan Find dengan FindNext.
Apa Itu Find?
Find adalah metode pada objek Range yang digunakan untuk mencari sel yang memenuhi kriteria tertentu.
Sintaks sederhananya:
Range.Find(What)
Parameter What berisi nilai yang akan dicari.
Contoh Dasar Find
Misalkan Anda ingin mencari nama Andi pada kolom A.
Sub CariData()
Dim Hasil As Range
Set Hasil = Range("A:A").Find("Andi")
If Not Hasil Is Nothing Then
MsgBox Hasil.Address
Else
MsgBox "Data tidak ditemukan."
End If
End Sub
Jika data ditemukan, VBA akan menampilkan alamat selnya.
Parameter Find yang Sering Digunakan
Beberapa parameter yang umum digunakan antara lain:
| Parameter | Fungsi |
|---|---|
What |
Nilai yang dicari |
After |
Sel awal pencarian |
LookIn |
Mencari pada nilai, rumus, atau komentar |
LookAt |
Pencocokan seluruh isi atau sebagian |
SearchOrder |
Berdasarkan baris atau kolom |
SearchDirection |
Arah pencarian |
MatchCase |
Membedakan huruf besar dan kecil |
Contoh:
Set Hasil = Range("A:A").Find( _
What:="Andi", _
LookAt:=xlWhole, _
MatchCase:=False _
)
Apa Itu FindNext?
FindNext digunakan untuk melanjutkan pencarian setelah Find menemukan hasil pertama.
Dengan FindNext, Anda dapat memperoleh seluruh data yang memiliki nilai yang sama.
Sintaksnya:
Range.FindNext(After)
Parameter After biasanya diisi dengan hasil pencarian sebelumnya.
Contoh Find dan FindNext
Misalkan nama Andi muncul beberapa kali.
Sub CariSemua()
Dim Awal As Range
Dim Hasil As Range
Set Awal = Range("A:A").Find("Andi")
If Not Awal Is Nothing Then
Set Hasil = Awal
Do
Debug.Print Hasil.Address
Set Hasil = Range("A:A").FindNext(Hasil)
Loop While Not Hasil Is Nothing And _
Hasil.Address <> Awal.Address
End If
End Sub
Makro akan menampilkan seluruh alamat sel yang berisi Andi.
Mengapa Harus Menyimpan Alamat Pertama?
Perhatikan bagian berikut.
Awal.Address
Nilai ini digunakan sebagai penanda bahwa pencarian telah kembali ke titik awal.
Tanpa pemeriksaan tersebut, FindNext akan terus berputar dan menghasilkan perulangan tanpa akhir.
Studi Kasus
Misalkan Anda ingin memberi warna kuning pada seluruh sel yang berisi kata Lunas.
Sub TandaiLunas()
Dim Awal As Range
Dim Sel As Range
Set Awal = Range("B:B").Find("Lunas")
If Not Awal Is Nothing Then
Set Sel = Awal
Do
Sel.Interior.Color = vbYellow
Set Sel = Range("B:B").FindNext(Sel)
Loop While Not Sel Is Nothing And _
Sel.Address <> Awal.Address
End If
End Sub
Semua data yang memenuhi kriteria akan diberi warna tanpa perlu memeriksa setiap sel satu per satu.
Find vs FindNext
| Find | FindNext |
|---|---|
| Menemukan hasil pertama | Menemukan hasil berikutnya |
| Digunakan sekali di awal | Digunakan berulang hingga seluruh hasil ditemukan |
| Dapat digunakan sendiri | Umumnya digunakan setelah Find |
Find vs For Each
| Find | For Each |
|---|---|
| Sangat cepat untuk pencarian | Memeriksa setiap sel |
| Tidak perlu membaca seluruh range | Cocok jika setiap sel memang harus diproses |
| Efisien untuk data besar | Lebih fleksibel untuk logika yang kompleks |
Jika tujuan utama hanya mencari data tertentu, Find biasanya lebih cepat dibandingkan For Each.
Kesalahan yang Sering Terjadi
Tidak Memeriksa Nilai Nothing
Jika data tidak ditemukan, Find akan menghasilkan Nothing.
Salah:
MsgBox Hasil.Address
Benar:
If Not Hasil Is Nothing Then
MsgBox Hasil.Address
End If
Tidak Menyimpan Alamat Pertama
Jika tidak membandingkan dengan alamat pertama, FindNext dapat terus mengulang pencarian tanpa henti.
Mengandalkan Pengaturan Find Sebelumnya
Metode Find mengingat parameter pencarian terakhir yang digunakan, baik melalui VBA maupun dialog Find di Excel.
Oleh karena itu, sebaiknya tentukan parameter penting seperti LookIn, LookAt, dan SearchOrder secara eksplisit agar hasil pencarian selalu konsisten.
Tips Praktis
💡 Gunakan Find untuk menemukan hasil pertama dengan cepat.
💡 Gunakan FindNext jika kemungkinan terdapat lebih dari satu hasil.
💡 Selalu simpan alamat hasil pertama sebagai penanda akhir perulangan.
💡 Periksa apakah hasil pencarian bernilai Nothing sebelum mengakses propertinya.
💡 Tentukan parameter LookAt dan LookIn secara eksplisit agar pencarian tidak dipengaruhi oleh pengaturan sebelumnya.
Ringkasan
| Metode | Fungsi |
|---|---|
Find() |
Menemukan data pertama yang sesuai |
FindNext() |
Menemukan data berikutnya |
Nothing |
Menandakan data tidak ditemukan |
LookAt |
Menentukan jenis pencocokan |
LookIn |
Menentukan lokasi pencarian |
Kesimpulan
Find dan FindNext merupakan pasangan metode yang sangat berguna untuk melakukan pencarian data di VBA Excel. Find digunakan untuk menemukan hasil pertama, sedangkan FindNext memungkinkan Anda melanjutkan pencarian hingga seluruh data yang sesuai berhasil ditemukan. Dengan memahami cara menggunakan keduanya secara bersamaan, Anda dapat membuat proses pencarian menjadi lebih cepat, lebih efisien, dan terhindar dari perulangan yang tidak diperlukan.
