JTPediaQuiz - Bank Soal, Quiz Interactive, Contoh-contoh Soal Ujian Sekolah, Uji Kompetensi, Ulangan Harian, DLL. More info

Sort, Cara Mengurutkan Data ListBox Plus Progressbar

More Info:

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:

Data Gaji

Cara Membuat Sort Data pada ListBox Plus Progressbar

  • 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:

    Form Sort Listbox Plus Progressbar
  • 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
    End Sub
  • 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:
    Assign Macro Load ListBox
  • 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 Karyawan
Jika semuanya sudah benar dan tidak ada kesalahan seharusnya tampil seperti contoh berikut....
Data Total ListBox

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:
Show Loading Progressbar

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:
Hasil Mengurutkan Data ListBox

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
Powered by Blogger.