Sort, Cara Mengurutkan Data ListBox Plus Progressbar
Fungsi Sort / Mengurutkan Data ListBox
Fungsi Sort dalam project vba excel ini berfungsi untuk mengurutkan data dalam rentang kolom dari suatu tabel berdasarkan kriteria/kolom tertentu. Sebagai contoh dalam project ini akan mengurutkan tabel "data_gaji_karyawan" berdasarkan nama karyawan dan status pernikahan yang sudah ditampilkan pada listbox baik mengurutkan data secara ascending (A to Z) maupun descending (Z to A)Sheet Data Utama Yang Akan Ditampilkan Pada ListBox
Pada contoh project vba excel untuk mengurutkan / sort data listbox plus progressbar ini sudah dibuatkan sebuah sheet sebagai database karyawan dan data keuangan yang diberinama "data_gaji_karyawan"Pada sheet "data_gaji_karyawan", title sebagai identitas setiap kolom datanya dibuat pada baris ke-4: ID, ID Karyawan/ID Pegawai, Nama Karyawan, Status Pernikahan, Jenis Kelamin, dan Contoh Nominal. Sebelum baris ke-4 dibuah sebuah object/shapes (LOAD DATA LISTBOX GAJI KARYAWAN) untuk Assgn Macro yang akan menampilkan Form Data pada Listbox, dan data utamanya di isikan mulai baris ke-5 seperti berikut:
Cara Membuat Sort Data pada ListBox Plus Progressbar
Progressbar Data ListBox
Sebelumnya silahkan lihat bagaimana trik, custom, dan cara membuat progressbar sebelum menampilkan data pada listbox- Buka visual basic editor (atau dengan menggunakan shortcut Alt + F11)
- Pada visual basic editor dan buat sebuah form. Pada contoh project ini sudah dibuat sebuah Form_Sort_PorgressBar_ListBox dan ditambahkan beberapa object yang sudah diberi nama sesuai kebutuhan seperti berikut:
- 1 Commandbutton: BTN_Reload_ListBox
- 1 ComboBox: CB_Sort
- 3 Label: LabelLoading, LabelTotalData, LabelInfo
Khusus untuk LabelLoading, tempatkan di dalam FrameLoading - 2 Frame: FrameLoading, Frame_ListBox
- 1 Listbox: LB_Detail_KARYAWAN
Harus hati-hati dalam mengatur atau menempatkan listbox LB_Detail_KARYAWAN di dalam Frame_ListBox
Setelah semua object yang diperlukan dibuat dan disusun penempatannya, akan terlihat seperti berikut:
-
Buat/insert sebuah Module (misalnya Module1), tambahkan beberapa kode berikut di dalamnya:
Option Explicit
Function GetRowKARYAWAN()
Dim wsGAJI_KARYAWAN As Worksheet
Set wsGAJI_KARYAWAN = ThisWorkbook.Worksheets("data_gaji_karyawan")
GetRowKARYAWAN = wsGAJI_KARYAWAN.Range("A" & wsGAJI_KARYAWAN.Rows.Count).End(xlUp).Row
End Function
Sub Load_ListBox()
Form_Sort_PorgressBar_ListBox.Show
End Sub
Sub ShowHideProgressbar(X As Double, Y As Object)'Menampilkan dan menyembunyikan progressbar
'X Prosentase, Y FORM
With Y
.FrameLoading.Visible = True
.LabelLoading.TextAlign = fmTextAlignCenter
.LabelLoading.Caption = Format(X, "0%")
.LabelLoading.Width = X * .FrameLoading.Width
If X = 1 Then
'setelah 100% FrameLoading => unvisible/hide
.FrameLoading.Visible = False
.LabelLoading.Caption = ""
.LabelLoading.Width = 0
End If
End With
DoEvents - Lalu tambahkan kode berikut pada form Form_Sort_PorgressBar_ListBox yang sudah dibuat sebelumnya
Option Explicit
Dim wsGAJI_KARYAWAN As Worksheet
Private Sub UserForm_Initialize()
CB_Sort.List = Array("Sort Menu", "Nama [A-Z]", "Nama [Z-A]", "Status [A-Z]", "Status [Z-A]")
CB_Sort.ListIndex = 0
End Sub
Private Sub UserForm_Activate()
Set wsGAJI_KARYAWAN = ThisWorkbook.Worksheets("data_gaji_karyawan")
Call Data_Total_ListBox
End Sub
Private Sub BTN_Reload_ListBox_Click()
Data_Total_ListBox
CB_Sort.ListIndex = 0 'alternatif mengembalikan index CB_Sort ke posisi Sort Menu
End Sub
Sub Data_Total_ListBox()
'Untuk menapilkan data total tabel pada listbox
Dim cNIS_NISNx As String, cNAMAx As String
Dim rDATA As Long, baris As Long, rMAX As Long
'rMAX sesuaikan dengan struktur tabel
'kesalahan dalam menentukan rMAX, progress bar akan tidak normal
rMAX = GetRowKARYAWAN - 4
Form_Sort_PorgressBar_ListBox.Enabled = False 'alternatif handle event click selama data belum di tampilkan
With LB_Detail_KARYAWAN
.Visible = False 'alternatif mempercepat proses menampilkan data
.Clear
.ColumnCount = 6
.ColumnHeads = False
.ColumnWidths = "0,75,120,60,50,30"
.AddItem
.List(0, 0) = "ID"
.List(0, 1) = "ID PEGAWAI": .List(0, 2) = "NAMA KARYAWAN"
.List(0, 3) = "STATUS": .List(0, 4) = "J-K"
.List(0, 5) = "NOMINAL"
For baris = 5 To GetRowKARYAWAN
.AddItem
.List(rDATA + 1, 0) = wsGAJI_KARYAWAN.Cells(baris, "A") 'ID
.List(rDATA + 1, 1) = wsGAJI_KARYAWAN.Cells(baris, "B") 'ID PEGAWAI
.List(rDATA + 1, 2) = wsGAJI_KARYAWAN.Cells(baris, "C") 'NAMA
.List(rDATA + 1, 3) = wsGAJI_KARYAWAN.Cells(baris, "D") 'STATUS
.List(rDATA + 1, 4) = wsGAJI_KARYAWAN.Cells(baris, "E") 'JK
.List(rDATA + 1, 5) = wsGAJI_KARYAWAN.Cells(baris, "F") 'NOMINAL
rDATA = rDATA + 1
LabelTotalDATA.Caption = " Total Entry: " & rDATA & " Data" 'Counting data sesuai progress
'untuk menampilkan progressbar sebelum semua data di load
'dan menyembunyikannya kembali setelah semua data selesai di load
Call ShowHideProgressbar(rDATA / rMAX, Form_Sort_PorgressBar_ListBox)
Next
.Visible = True
Form_Sort_PorgressBar_ListBox.Enabled = True
End With
Form_Sort_PorgressBar_ListBox.Enabled = True
End Sub
Private Sub CB_Sort_Change()
'Sorting atau mengurutkan data listbox sesuai kebutuhan
LB_Detail_KARYAWAN.SetFocus 'alt setfocus sebelum di sort + hide list CB_Sort
If CB_Sort.ListIndex = 1 Then
Call ListBoxSort(2, 1) 'Sort/Mengurutkan Data ListBox Secara Ascending Sesuai Nama [A-Z]
ElseIf CB_Sort.ListIndex = 2 Then
Call ListBoxSort(2, -1) 'Sort/Mengurutkan Data ListBox Secara Descending Sesuai Nama [Z-A]
ElseIf CB_Sort.ListIndex = 3 Then
Call ListBoxSort(3, 1) 'Sort/Mengurutkan Data ListBox Secara Ascending Sesuai Status Pernikahan [A-Z]
ElseIf CB_Sort.ListIndex = 4 Then
Call ListBoxSort(3, -1) 'Sort/Mengurutkan Data ListBox Secara Descending Sesuai Status Pernikahan [Z-A]
End If
End Sub
Sub ListBoxSort(Column As Single, X As Integer)
'Sorting atau mengurutkan secara dinamis data ListBox sesuai kebutuhan
Dim i As Long
Dim j As Long, c As Long
Dim sTemp0 As String
Dim sTemp1 As String
Dim sTemp2 As String, sTemp3 As String, sTemp4 As String
Dim LbList As Variant
Dim rMAX As Long
Application.ScreenUpdating = False
Form_Sort_PorgressBar_ListBox.Enabled = False 'handle event click sebelum data di sort / di urutkan
'rMAX sesuaikan dengan struktur tabel
'kesalahan dalam menentukan rMAX, progress bar akan tidak normal
rMAX = GetRowKARYAWAN - 4
With LB_Detail_KARYAWAN
LbList = .List
For i = 1 To UBound(LbList, 1) 'custom tergantung kebutuhan data kolom listbox
For j = i To UBound(LbList, 1) 'custom tergantung kebutuhan data kolom listbox
If StrComp(LbList(i, Column), LbList(j, Column), vbTextCompare) = X Then
For c = 0 To .ColumnCount - 1
sTemp2 = LbList(i, c)
LbList(i, c) = LbList(j, c)
LbList(j, c) = sTemp2
Next c
End If
Next j
Form_Sort_PorgressBar_ListBox.LabelTotalDATA.Caption = " Total Entry: " & i & " Data"
'untuk menampilkan progressbar sebelum semua data di sort
'dan menyembunyikannya kembali setelah semua data selesai di sort
Call ShowHideProgressbar(i / rMAX, Form_Sort_PorgressBar_ListBox)
Next i
'Clear content
.Clear
'show data list yang sudah di sort
.List = LbList
Form_Sort_PorgressBar_ListBox.Enabled = True
End With
Form_Sort_PorgressBar_ListBox.Enabled = True
Application.ScreenUpdating = True
End Sub - Untuk menampilkan data listbox (yang dilengkapi sort data dan progressbar) dengan object button LOAD DATA LISTBOX GAJI KARYAWAN pada sheet "data gaji karyawan" yang sudah dibuat sebelumnya:
Klik kanan object button Load Data ListBox Gaji Karyawan ⟾ Assign Macro ⟾ Pada Macro Name, pilih Load_ListBox seperti berikut:
- Langkah terakhir, silahkan save file project dengan macro dan vba excel ini, misalnya:
- cara membuat sort data listbox dengan progressbar.xlsm
- bagaimana mengurutkan data listbox.xlsm
- menampilkan dan mengurutkan data listbox.xlsb
- trik, custom, dan cara sort data listbox dengan progressbar.xlsb
- dan sebagainya....
Menampilkan Data ListBox
Untk mencoba semua kode yang sudah dibuat dan menampilkan data pada listbox ini, silahkan klik button Load Data ListBox Gaji KaryawanJika semuanya sudah benar dan tidak ada kesalahan seharusnya tampil seperti contoh berikut....
Mengurutkan Data ListBox Plus Progressbar
Untuk menampilkan dan mengurutkan data listbox dengan progressbar ini, coba klik combobox Sort Menu, misalnya pilih untuk mengurutkan data Nama [Z-A]. Hasilnya akan terlihat seperti berikut:Catatan:
Lamanya progress bar tergantung banyak data (row) yang diproses/akan ditampilkan
Jika datanya kurang dari 100 row, progressbar relatif tidak terlihat
Jika databasenya banyak (ribuan), progressbar akan jelas telihat jelas prosesnya
Setelah data berhasil diurutkan dan prosentase progressbar mencapai 100% akan tampil seperti berikut:
Project Exclusive Mengurutkan Data ListBox
Implementasi cara mengurutkan data ini sudah diterapkan pada salah satu exclusive project:
Aplikasi untuk Mengelola Berbagai Keuangan Sekolah Terbaru untuk SD/MI, SMP/MTs, dan untuk SMA/SMAK
Aplikasi untuk Mengelola Berbagai Keuangan Sekolah Terbaru untuk SD/MI, SMP/MTs, dan untuk SMA/SMAK