Range : Advanced Filter

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])
  • Expression = Range Data Yang akan di FIlter
  • Action [Required] = xlFilterInPlace atau xlFilterCopy.
    • xlFilterInPlace – Filter langsung di sumber data.
    • xlFilterCopy – Copy hasil Filter ke Range baru.
  • CriteriaRange [Optional] = Range yang digunakan sebagai kriteria Filter.
  • CopyToRange [Optional] = Range Tujuan, Jika menggunakan xlFilterCopy.
  • Unique [Optional] = True Jika ingin menampilkan data unik tanpa duplikat.

Misalkan disini saya memiliki data seperti dibawah ini

Sheet1

Filter Copy

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.

Sheet2

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.

Wildcard dan Relational

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

Custom Column

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.

Filter In Place

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

Reset Advanced Filter

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


4 thoughts on “Range : Advanced Filter

Leave a Reply

Your email address will not be published. Required fields are marked *

Chat WhatsApp
WhatsApp