Disini saya akan menggunakan sebuah list data excell dengan memasukkan data nominal gaji karyawan di kolom D2 sampai denga D100,


setelah itu buka macro dan buat module baru kemudian copy paste kode berikut ini, maka akan muncul jumlah pecahan yang dibulatkan ke 100 rupiah teratas

Sub HitungPecahanGajiPerOrang()

' Definisikan variabel
Dim BarisMulai As Long
Dim BarisAkhir As Long
Dim BarisSaatIni As Long
Dim GajiSaatIni As Double
Dim Pecahan(10) As Long
Dim Sisa As Long
Dim i As Integer
Dim KolomOutputMulai As Long
Dim SheetAktif As Worksheet

' Pecahan yang tersedia (dalam Rupiah)
Dim NilaiPecahan() As Variant
NilaiPecahan = Array(100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100)
' Tentukan range data gaji
BarisMulai = 2
BarisAkhir = 100
' Tentukan kolom output. Kolom D adalah data gaji, jadi output dimulai di kolom E
KolomOutputMulai = 10 ' Kolom K
' Tetapkan sheet yang sedang aktif
Set SheetAktif = ThisWorkbook.Sheets("Sheet1")
' *** PENTING: Ganti "Sheet1" dengan nama sheet Anda jika berbeda! ***
' -------------------------------------------------------------
' 1. Menyiapkan Header (Judul Kolom)
' -------------------------------------------------------------
' Tulis header untuk gaji yang dibulatkan
SheetAktif.Cells(1, KolomOutputMulai).Value = "Gaji Dib."
' Tulis header untuk setiap pecahan
For i = LBound(NilaiPecahan) To UBound(NilaiPecahan)
Dim HeaderKolom As String
HeaderKolom = Format(NilaiPecahan(i), "#,##0")
SheetAktif.Cells(1, KolomOutputMulai + 1 + i).Value = HeaderKolom
Next i
' -------------------------------------------------------------
' 2. Melakukan Perhitungan untuk Setiap Baris
' -------------------------------------------------------------
For BarisSaatIni = BarisMulai To BarisAkhir
' 1. Ambil data gaji dari Kolom D (Kolom ke-4)
GajiSaatIni = SheetAktif.Cells(BarisSaatIni, 4).Value
' 2. Pembulatan ke Kelipatan 100 Terdekat ke ATAS
If GajiSaatIni > 0 Then
' Fungsi Worksheet.Ceiling.Math untuk membulatkan ke kelipatan 100 terdekat ke atas
GajiSaatIni = Application.WorksheetFunction.Ceiling_Math(GajiSaatIni, 100)
End If
Sisa = GajiSaatIni ' Sisa uang yang harus dipecah
' 3. Menghitung Kebutuhan Pecahan
For i = LBound(NilaiPecahan) To UBound(NilaiPecahan)
Pecahan(i) = 0 ' Reset
If Sisa >= NilaiPecahan(i) Then
Pecahan(i) = Int(Sisa / NilaiPecahan(i))
Sisa = Sisa Mod NilaiPecahan(i)
End If
Next i
' 4. Menampilkan Hasil ke Baris Saat Ini
' Tampilkan Gaji yang Sudah Dibulatkan (Kolom E)
SheetAktif.Cells(BarisSaatIni, KolomOutputMulai).Value = GajiSaatIni
' Tampilkan jumlah pecahan (Mulai dari Kolom F dan seterusnya)
For i = LBound(NilaiPecahan) To UBound(NilaiPecahan)
SheetAktif.Cells(BarisSaatIni, KolomOutputMulai + 1 + i).Value = Pecahan(i)
Next i
Next BarisSaatIni
' Terapkan format angka pada hasil pecahan
SheetAktif.Range(SheetAktif.Cells(BarisMulai, KolomOutputMulai), SheetAktif.Cells(BarisAkhir, KolomOutputMulai)).NumberFormat = "#,##0"
MsgBox "Perhitungan kebutuhan pecahan per baris telah selesai. Hasil ditampilkan di kolom E dan seterusnya.", vbInformation

End Sub