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