Pada Meteri ini saya akan membahas tentang Advanced Filter (Filter Lanjutan) dalam VBA.
Disini kita akan memahami bagaimana menggunakan Advanced Filter di VBA, ketika menggunakan jumlah data yang besar kemudian kita ingin mencari data berdasarkan kriteria atau menampilkan data dengan nilai tertentu, gunakan Advanced Filter.
Advanced Filter VBA memungkinkan kita untuk mencari data berdasarkan Kriteria Range. Ini memungkinkan kita melakukan filter yang lebih cepat daripada filter biasa di worksheet.
Selain itu bisa juga menghapus duplikat dari data dengan menggunakan filter ini.
Sintaksis dari Advanced Filter adalah :
Expression.AdvancedFilter (Action, [CriteriaRange], [CopyToRange], [Unique])
Misalkan disini saya memiliki data seperti dibawah ini
Untuk contoh pertama saya akan bahas terlebih dahulu untuk FilerCopy. Karena ini banyak sekali digunakan terutama dalam menggunakan Listbox dengan metode RowSource.
Listbox yang diisi melalui Rowsource ketika akan mencari data harus menggunakan advance filter karena listboxnya tidak memiliki nilai, dan nilainya langsung berada didalam range.
Filter copy adalah melakukan Filter pada Range A dan menyimpan hasilnya pada Range B, sehingga hasil Filter tidak mengubah sumber aslinya.
Misalnya pada sheet tujuan sudah saya siapkan seperti dibawah ini.
Selanjutnya untuk melakukan Filter, pada script di Tombol Filter kita buat deklarasi variable terlebih dahulu untuk memudahkan.
Private Sub CommandButton1_Click() Dim Sumber As Range Dim Tujuan As Range Dim Kriteria As Range Set Sumber = Sheet1.Range("B2:F13") Set Tujuan = Sheet2.Range("B6:F6") Set Kriteria = Sheet2.Range("B2:F3") End Sub
Selanjutnya tinggal tambahkan Advance Filter seperti sintaksis diatas, dan hasilnya menjadi seperti dibawah ini
Private Sub CommandButton1_Click() Dim Sumber As Range Dim Tujuan As Range Dim Kriteria As Range Set Sumber = Sheet1.Range("B2:F13") Set Tujuan = Sheet2.Range("B6:F6") Set Kriteria = Sheet2.Range("B2:F3") Sumber.AdvancedFilter xlFilterCopy, Kriteria, Tujuan, False End Sub
Saat range Kriteria diisi misalnya pada Jenis kelamin saya isi Laki Laki (Penulisan harus sama persis) maka akan menampilkan hasil seperti dibawah ini
Untuk kriteria lain, misalnya ingin mencari Kelas : A dan Jenis Kelamin : Laki laki, maka Range bisa diisi seperti dibawah ini.
Untuk penggunaan wilcard dan juga Operator relational (Baca juga : Operator : Relational ) bisa langsung ditambahkan kedalam Kriteria.
Misalnya ingin mencari Jabatan yang memiliki kata “REK” maka kriteria bisa ditulis seperti dibawah ini
Atau misalnya Relational, No yang dibawah 7
Pada hasil Advanced Filter, Judul kolom pada range tujuan merupakan kunci dimana Data tersebut ditampilkan.
Urutan posisi kolom tidak harus sama persis mengikuti sumber data. Tetapi Penulisan setiap nama kolom harus sama persis.
Misalnya disini hasil kolom saya acak menjadi seperti dibawah ini, maka data dibawahnya akan mengikuti sesuai judul kolomnya masing-masing.
Atau bahkan nama kolom bisa ditampilkan sebagian saja. Misalnya, kolom yang ingin digunakan adalah No, Nama dan Jabatan.
Maka, pada range tujuan sesuaikan alamat range menjadi dari B6 sampai D6 saja, karena hanya menggunakan 3 kolom saja.
Private Sub CommandButton1_Click() Dim Sumber As Range Dim Tujuan As Range Dim Kriteria As Range Set Sumber = Sheet1.Range("B2:F13") Set Tujuan = Sheet2.Range("B6:D6") 'Disesuikan Set Kriteria = Sheet2.Range("B2:F3") Sumber.AdvancedFilter xlFilterCopy, Kriteria, Tujuan, False End Sub
Dan berikut hasilnya, Advanced Filter akan menampilkan data sesuai dengan kolom yang ditentukan saja.
Untuk Filter in Place tidak jauh berbeda dengan Filter copy yang membedakan hanyalah hasil dari filter tersebut langsung disimpan di Sumberdata sehingga tidak diperlukan memasukan Range tujuan.
Sumber data akan di filter sama seperti kita memfilter didalam range, nilai yang tidak termasuk kriteria akan di Hide (disembunyikan).
Misalnya saya buat data seperti dibawah ini,
Untuk scriptnya bisa dibuat seperti dibawah ini
Private Sub CommandButton1_Click() Dim Sumber As Range Dim Tujuan As Range Dim Kriteria As Range Set Sumber = Sheet1.Range("B5:F16") Set Kriteria = Sheet1.Range("B2:F3") Sumber.AdvancedFilter xlFilterInPlace, Kriteria, , False End Sub
Hasil filter akan terlihat seperti ini, dimana nilai yang tidak termasuk kriteria akan dihide
Karena Filter data langsung dilakukan di Sumbernya maka diperlukan sebuah printah untuk memunculkan kembali semua data.
Jika menggunakan FilterCopy tentu saja hal ini tidak diperlukan, karena sumber data tidak tergantu oleh Advance FIlter.
Untuk memunculkan kembali data yang terfilter bisa menggunakan perintah
Sheet1.ShowAllData
atau bisa juga dengan mengkosongkan semua range kriteria, kemudian klik Filter.
Download File
Salam, bagaimana untuk filter copy kalau kriteria filter semua kolom ada tetapi yang mau ditampilkan di sheet “hasil” hanya kolom nama dan jabatan atau tidak semua kolom dari database tampil?
Buat pada kolom Hasil, kolom kolom yang mau ditampilkan saja
Siap mas, sudah berhasil, terimakasih
Klau sumber datanya nambah biar dinamis gmna yaa.. range-nya scriptnya