VBA Excel Menampilkan Data Berdasarkan Drop Down List

VBA Excel adalah teknologi yang bagus dan telah menyelesaikan persoalan banyak orang. Seseorang bertanya bagaimana menampilkan Id Pelanggan (ID_Pel) di I3 jika drop-down (Nama) di H3 diubah. Persoalan seperti ini adalah wilayah VBA Excel, dimana pengguna butuh kendali lebih atas data namun dapat tetap interaktif.

Sejujurnya penulis sudah >11 tahun tidak pernah lagi memprogram Basic, terakhir VB 6.0, karena itu bahkan untuk membuka VBA Excel penulis harus meng-googling (ternyata Alt + F11 di Excel). Karena file yang penulis buat adalah reproduksi dari kasus di atas, penulis juga harus meng-googling bagaimana cara membuat drop-down list dengan nilai dari kolom B. Penulis sempat berpikir membuat drop-down list harus dengan VBA, dan ternyata cukup menggunakan Menu Data > Data Tools > Data Validation di Excel, hahaha.

Langkahnya seperti ini, klik pada sel tujuan tempat menampilkan drop-down list (combo box), misal H3 lalu di Ribbon Excel pilih Data > Data Tools > Data Validation > Data Validation.

Di Tab Settings pilih Allow: List, Hapus Centang pada Ignore Blank dan pilih Source: (misal =$B$2:$B$17).

Pada Tab Input Message, Hapus Centang di pilihan Show input message when cell is selected, Lalu klik OK.

Sekarang jika kita meng-klik sel H3 akan muncul segitiga yang akan menampilkan daftar Nama (kolom B).

Sekarang bagaimana bila ingin menampilkan ID_Pel di sel I3 jika drop-down list berubah? Inilah saatnya VBA Excel tampil, kodenya cukup beberapa baris. Namun karena tidak terbiasa dengan VBA, penulis membutuhkan > 3 jam untuk mencapai 23 baris ini.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$3" Then
With Application
    .EnableEvents = False
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
Dim arrCustomer As Variant
arrCustomer = ActiveSheet.Range("$B$2:$C$17")

Dim R As Long

For R = 1 To UBound(arrCustomer, 1)
If arrCustomer(R, 1) = ActiveSheet.Range("$H$3").Value Then
ActiveSheet.Range("$I$3").Value = arrCustomer(R, 2)
End If
Next R

With Application
    .EnableEvents = True
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End If
End Sub

Kode di atas adalah fungsi yang akan dipanggil jika terjadi perubahan pada worksheet. Perubahan apa? Jika sel H3 berubah. Penulis tidak paham baris With Application sampai End With tapi sepertinya itu adalah blok kode standar untuk fungsi Worksheet_Change.

Dim arrCustomer artinya membuat array yang akan menampung nilai dari $B$2 sampai $C$17. Lalu ada variable R, bertipe Long Integer yang digunakan saat perulangan membaca nilai dari kolom B baris 2 sampai 17. Jika pada perulangan tersebut ditemukan baris yang kolom B-nya berisi nama yang sama dengan H3 maka I3 diisi dengan nilai kolom C dari baris tersebut.

Dah, gitu doank. Jangan lupa menyimpan VBA Excel dan file Excel disimpan dalam type Excel Macro-Enabled Workbook (*.xlsm).

Hasilnya dalam gif seperti ini, terimakasih pada member grup Excel Indonesia yang sudah memberikan wacana soal gif.

Terimakasih pada pak Gufron G yang memberikan alternatif lain jika ingin menghindari VBA. Pada I3 alih-alih menggunakan VBA kita dapat menggunakan formula pendek.

=VLOOKUP(H3,B:C,2,0)

Ide Excel lain dari pak GG sila baca di tulisan di linkedin ini.

Salam.

Cover Photo by Clรฉment H on Unsplash

8 Replies to “VBA Excel Menampilkan Data Berdasarkan Drop Down List”

  1. Asiknya dengan Excel adalah Setelah membuat Drop Down List di Cell H3, di kolom I3 bisa diisi dengan =VLOOKUP(H3,B:C,2,0)
    dan baris kode VBA tersebut jadi tidak diperlukan lagi ๐Ÿ˜€

    1. Semoga Bang Gufron & Bang Aan dalam keadaan sehaat…chat ini dari 2018, tapi saya iseng pengen bales di 2022…kabar baiknya sekarang sudah ada XLOOKUP… bye2 vlookup ๐Ÿ™‚

  2. pake vba juga bisa, tinggal rumusnya aja kaya gini
    ActiveSheet.Cells(3, 9).Formula = “=VLOOKUP(H3,B:C,2,0)”
    walaupun cells I3 dihapus dia akan muncul lgi, itu enaknya pakai vba daripada rumusnya langsung di cell

Leave a Reply

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