Function Raspodjela(Optional BrojOsoba As Integer = 5) Dim Kovanice As Object Dim Vrijednosti As Object Dim UkupnaVrijednost As Currency Dim Apoen As Variant Dim Podjela As Currency Dim I, N As Integer Dim KovanicaVrijednost As Currency Dim BrojKovanica As Integer Dim KovanicaRaspodjela As Integer Dim OsobaIndex As Integer Dim PodjelaPara() As Integer Set Kovanice = CreateObject("Scripting.Dictionary") Kovanice.Add "50c", 24 ' 50 centi Kovanice.Add "1e", 28 ' 1 euro Kovanice.Add "2e", 29 ' 2 eura Kovanice.Add "5e", 4 ' 5 eura Set Vrijednosti = CreateObject("Scripting.Dictionary") Vrijednosti.Add "50c", 0.5 Vrijednosti.Add "1e", 1 Vrijednosti.Add "2e", 2 Vrijednosti.Add "5e", 5 ReDim PodjelaPara(1 To BrojOsoba, 1 To 4) UkupnaVrijednost = 0 For Each Apoen In Kovanice.Keys UkupnaVrijednost = UkupnaVrijednost + (Kovanice(Apoen) * Vrijednosti(Apoen)) Next Apoen Podjela = UkupnaVrijednost / BrojOsoba OsobaIndex = 1 For I = 1 To BrojOsoba IznosPreostali = Podjela For Each Apoen In Array("5e", "2e", "1e", "50c") KovanicaVrijednost = Vrijednosti(Apoen) BrojKovanica = Kovanice(Apoen) KovanicaRaspodjela = 0 Do While IznosPreostali >= KovanicaVrijednost And BrojKovanica > 0 If I = BrojOsoba Then KovanicaRaspodjela = BrojKovanica BrojKovanica = 0 IznosPreostali = IznosPreostali - KovanicaVrijednost Else KovanicaRaspodjela = KovanicaRaspodjela + 1 IznosPreostali = IznosPreostali - KovanicaVrijednost BrojKovanica = BrojKovanica - 1 End If Loop PodjelaPara(OsobaIndex, Application.Match(Apoen, Array("50c", "1e", "2e", "5e"), 0)) = _ PodjelaPara(OsobaIndex, Application.Match(Apoen, Array("50c", "1e", "2e", "5e"), 0)) + KovanicaRaspodjela Kovanice(Apoen) = BrojKovanica Next Apoen OsobaIndex = OsobaIndex + 1 Next I ' Ispis rezultata u Excel Dim ImesSita As String ImesSita = "Raspodjela kovanica" Obrisi (ImesSita) Dim ws As Worksheet Set ws = ThisWorkbook.Sheets.Add ws.Name = ImesSita ' Ispis naziva stupaca (kovanice) ws.Cells(1, 1).Value = "Osoba" ws.Cells(1, 2).Value = "50c" ws.Cells(1, 3).Value = "1e" ws.Cells(1, 4).Value = "2e" ws.Cells(1, 5).Value = "5e" ' Ispis raspodjele po osobama For I = 1 To BrojOsoba ws.Cells(I + 1, 1).Value = "Osoba " & I For N = 1 To 4 ws.Cells(I + 1, N + 1).Value = PodjelaPara(I, N) Next N Next I For I = 1 To BrojOsoba Dim suma As Currency suma = PodjelaPara(I, 1) * 0.5 + PodjelaPara(I, 2) * 1 + PodjelaPara(I, 3) * 2 + PodjelaPara(I, 4) * 5 ws.Cells(I + 1, 6).Value = "' " & suma & " " & Chr(128) Next I Dim BrojApoena As Integer For I = 2 To 5 BrojApoena = 0 For N = 2 To BrojOsoba + 1 BrojApoena = BrojApoena + ws.Cells(N, I).Value Next N ws.Cells(BrojOsoba + 2, I).Value = BrojApoena Next I MsgBox "Gotovo!", vbInformation End Function Function Obrisi(Naziv As String) Dim ws As Worksheet On Error Resume Next Set ws = ThisWorkbook.Sheets(Naziv) On Error GoTo 0 If Not ws Is Nothing Then Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True End If End Function