Menampilkan dan Mencari Data ListBox
Trik, Custom, dan Cara Menampilkan serta Mencari Data Pada ListBox
Langkah pertama, sebelum menampilkan dan mencari data pada sebuah listbox menggunakan Macro dan VBA Excel, silahkan buka aplikasi excel, buat file baru, dan buat dulu data pada sheets excel yang menampung data-data yang diperlukan sesuai kebutuhan.Pada contoh project ini, misalnya sheets name excel yang diperlukan diberi nama "data_pembayaran_keuangan_siswa", dimana headernya dari mulai baris ke-4 yang berisi: ID, NIS/NISN, Nama Siswa, Kelas, Jenis Kelamin, dan Nominal Pembayaran. Sebelum baris ke-4 ditambahkan 1 object / shapes (Load ListBox) yang nantinya digunakan untuk assign macro. Dan data-data utamanya diisi mulai baris ke-5 seperti gambar berikut
Langkah selanjutnya bagaimana trik, custom dan cara menampilkan serta mencari data pada listbox menggunakan Macro dan VBA Excel
- Buka visual basic editor (atau menggunakan ALT + F11)
- Buat 1 buah user form dan berinama misalnya ListBox_Cari_Data
Setelah form ListBox_Cari_Data dibuat silahkan gunakan toolbox untuk menambahkan beberapa object yang diperlukan:- 1 buah textbox: sCariListBox
- 2 commandbutton: btnCARI dan btnREFRESH
- 1 buah listbox: LBDetailSISWA
- 2 label: sTotalDATA dan sINFO
-
Buat/tambahkan (silahkan copy dan paste) code berikut pada form ListBox_Cari_Data yang sudah dibuat sebelumnya
Option Explicit
Dim wsBayarSPP As Worksheet
Dim xR As Integer, yR As Integer, xCARI As Integer, yCARI As Integer, strCARI As String
Private Sub UserForm_Initialize()
Set wsBayarSPP = ThisWorkbook.Worksheets("data_pembayaran_keuangan_siswa")
Call Data_Total_ListBox
End Sub
Sub Data_Total_ListBox()
'Untuk menapilkan data total tabel pada listbox
Dim cNIS_NISNx As String, cNAMAx As String
Dim S As Long, baris As Long
With LBDetailSISWA
.Visible = False
.Clear
.ColumnCount = 6
.ColumnHeads = False
.ColumnWidths = "0,75,120,60,50,30"
.AddItem
.List(0, 0) = "ID"
.List(0, 1) = "NIS / NISN": .List(0, 2) = "NAMA SISWA"
.List(0, 3) = "KELAS": .List(0, 4) = "J-K"
.List(0, 5) = "NOMINAL"
For baris = 5 To GetRowSPP
.AddItem
.List(S + 1, 0) = wsBayarSPP.Cells(baris, "A") 'ID
.List(S + 1, 1) = wsBayarSPP.Cells(baris, "B") 'NIS
.List(S + 1, 2) = wsBayarSPP.Cells(baris, "C") 'NAMA
.List(S + 1, 3) = wsBayarSPP.Cells(baris, "D") 'KELAS
.List(S + 1, 4) = wsBayarSPP.Cells(baris, "E") 'JK
.List(S + 1, 5) = wsBayarSPP.Cells(baris, "F") 'NOMINAL
S = S + 1
Next
.Visible = True
End With
sTotalDATA.Caption = " Total Entry: " & S & " Data"
xR = 0: yR = 0 'reset default variabel
End SubPrivate Sub sCariListbox_Change()
If sCariListBox = Empty And xR = 1 Then Application.OnTime Now(), "Reload_ListBox"
End Sub
Private Sub sCariListBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If yR = 1 Then xR = 1
End SubPrivate Sub btnCARI_Click()
If sCariListBox = Empty Then
MsgBox "Tikda Ada Data yang DICARI...!!!", vbExclamation, "Info"
sCariListBox.SetFocus
Else
Call Cari_Data_ListBox
sCariListBox.SetFocus
End If
End Sub
Private Sub btnREFRESH_Click()
If yR > 0 Then Call Data_Total_ListBox
sCariListBox = Empty
sCariListBox.SetFocus
End Sub
Private Sub LBDetailSISWA_Click()
If LBDetailSISWA.ListIndex > 0 Then
If strCARI = Empty Then
sCariListBox = LBDetailSISWA.List(LBDetailSISWA.ListIndex, 2) 'sesuai kebutuhan
Else
sCariListBox = strCARI
End If
strCARI = Empty 'reset @click listbox
If yR = 1 Then xR = 1
Else
xR = 0
sCariListBox = Empty
End If
End SubSub Cari_Data_ListBox()
Dim cNIS_NISNx As String, cNAMAx As String, cKELASx As String, cJKx As String, cNOMINALx As String
Dim S As Long, baris As Long
Application.ScreenUpdating = False
With LBDetailSISWA
.Visible = False
.Clear
.ColumnCount = 6
.ColumnHeads = False
.ColumnWidths = "0,75,120,60,50,30"
.AddItem
.List(0, 0) = "ID"
.List(0, 1) = "NIS / NISN": .List(0, 2) = "NAMA SISWA": .List(0, 3) = "KELAS": .List(0, 4) = "J-K"
.List(0, 5) = "NOMINAL"
If xCARI = 0 Then
For baris = 5 To GetRowSPP
cNIS_NISNx = wsBayarSPP.Cells(baris, "B")
cNAMAx = wsBayarSPP.Cells(baris, "C")
cKELASx = wsBayarSPP.Cells(baris, "D")
cJKx = wsBayarSPP.Cells(baris, "E")
cNOMINALx = wsBayarSPP.Cells(baris, "F")
If UCase(cNIS_NISNx) Like "*" & UCase(sCariListBox) & "*" Or _
UCase(cNAMAx) Like "*" & UCase(sCariListBox) & "*" Or _
UCase(cKELASx) Like "*" & UCase(sCariListBox) & "*" Or _
UCase(cJKx) Like "*" & UCase(sCariListBox) & "*" Or _
UCase(cNOMINALx) Like "*" & UCase(sCariListBox) & "*" Then
.AddItem
.List(S + 1, 0) = wsBayarSPP.Cells(baris, "A") 'ID
.List(S + 1, 1) = cNIS_NISNx
.List(S + 1, 2) = cNAMAx
.List(S + 1, 3) = cKELASx
.List(S + 1, 4) = cJKx
.List(S + 1, 5) = cNOMINALx
S = S + 1
End If
Next
sTotalDATA.Caption = " Hasil Pencarian: " & S & " Data"
Call CekHasilPencarianData
Else
For baris = 5 To GetRowSPP
cNIS_NISNx = wsBayarSPP.Cells(baris, "B")
cNAMAx = wsBayarSPP.Cells(baris, "C")
cKELASx = wsBayarSPP.Cells(baris, "D")
cJKx = wsBayarSPP.Cells(baris, "E")
cNOMINALx = wsBayarSPP.Cells(baris, "F")
If UCase(cNIS_NISNx) = UCase(sCariListBox) Or UCase(cNAMAx) = UCase(sCariListBox) Or _
UCase(cKELASx) = UCase(sCariListBox) Or UCase(cJKx) = UCase(sCariListBox) Or _
UCase(cNOMINALx) = UCase(sCariListBox) Then
.AddItem
.List(S + 1, 0) = wsBayarSPP.Cells(baris, "A") 'ID
.List(S + 1, 1) = cNIS_NISNx
.List(S + 1, 2) = cNAMAx
.List(S + 1, 3) = cKELASx
.List(S + 1, 4) = cJKx
.List(S + 1, 5) = cNOMINALx
S = S + 1
End If
Next
sTotalDATA.Caption = " Hasil Pencarian: " & S & " Data"
xCARI = 0 'reset xCARI awal
Call SetFocusHasilCari 'alternatif
End If
.Visible = True
End With
xR = 1: yR = 1
Application.ScreenUpdating = True
End SubSub SetFocusHasilCari()
'alternatif
'Set focus hasil pencarian jika hasil cari sama persis dengan data di tabel/list box (*)
Dim i As Integer, j As Integer
With LBDetailSISWA
.ListIndex = -1
For i = 1 To .ListCount - 1
For j = 1 To .ColumnCount - 1
If InStr(1, .Column(j, i), sCariListBox, vbTextCompare) Then
If UCase(.Column(j, i)) = UCase(sCariListBox) Then
.ListIndex = i '(*)
Exit Sub 'STOP jika sudah ada data yang sama persis
End If
End If
Next j
DoEvents
Next i
End With
End SubSub CekHasilPencarianData()
'Cek hasil pencarian data yang mirip atau sama persis
'Jika data yang dicari sama persis dengan data pada listbox, pencarian dan filtering data akan diterukan (dicari ulang)
Dim i As Integer, j As Integer
With LBDetailSISWA
.ListIndex = -1
For i = 1 To .ListCount - 1
For j = 1 To .ColumnCount - 1
If InStr(1, .Column(j, i), sCariListBox, vbTextCompare) Then
If UCase(.Column(j, i)) = UCase(sCariListBox) Then
xCARI = 1 'control cari data Cari_Data_ListBox
strCARI = sCariListBox
Call Cari_Data_ListBox 'pencarian dan filtering ulang
Exit Sub 'STOP jika sudah menemuka data yang sama persis
Else
strCARI = Empty
End If
End If
Next j
DoEvents
Next i
End With
End Sub - Selanjutnya buat module (module1) dan tambah beberapa kode seperti berikut:
Option Explicit
Function GetRowSPP()
Dim wsBayarSPP As Worksheet
Set wsBayarSPP = ThisWorkbook.Worksheets("data_pembayaran_keuangan_siswa")
GetRowSPP = wsBayarSPP.Range("A" & wsBayarSPP.Rows.Count).End(xlUp).Row
End FunctionSub Load_ListBox()
ListBox_Cari_Data.Show
End SubSub Reload_ListBox()
ListBox_Cari_Data.Data_Total_ListBox
End Sub - Untuk menampilkan listbox dengan object button Load ListBox pada sheet yang sudah dibuat sebelumnya
Klik kanan object button Load ListBox ⟾ Assign Macro ⟾ Pada Macro Name, pilih Load_ListBox seperti berikut:
- Langkah terakhir, silahkan save file project macro vba excel ini, misalnya "cara menampilkan dan mencari data listbox.xlsm" atau "show and search data listbox.xlsm" atau apapaun
Contoh Data Total yang Ditampilkan pada ListBox
Jika semua kode sudah dibuat dengan benar dan tidak ada kesalahan, berikut ini contoh semua data yang ditampilkan pada listboxContoh Variasi Tampilan Hasil Pencarian Data pada Listbox
- Hasil pencarian data (sebagai contoh string 4500) yang mirip dengan data pada listbox
- Hasil pencarian data nama siswa (sebagai contoh nama tess) yang mirip dengan data pada listbox
- Hasil pencarian data kelas (sebagai contoh text XII BAHASA) yang sama persis dengan data pada listbox
- Hasil pencarian data nama siswa (sebagai contoh sample siswa 100) yang sama persis dengan data pada listbox