Avko 16.12.2024 13:13
Predmet:rasporedi kovanice EXCEL

Trebalo bi podjednako rasporediti kovanice na 5 osoba.
Ukupno broj kovanica je 85, a od toga je 24 kovanice po 50 centi, 28x1euro, 29x2eura, 4x5eura.

Iznos po osobi ne smije biti manji od 24 eura. To se moze rucno, ali problem je ako imamo vishe kovanica ili vishe osoba.

Pitanje:
Moze li se to sa VBA napraviti. Pada mi na pamet nekakva matrica i for - next petlja, ali ako moze neki savjet kako to zapoceti.
Prilozi:
rasporediKovanice.zip (Velicina datoteke:6.14 KB)

Gjoreski 16.12.2024 13:55
Predmet:Re:rasporedi kovanice EXCEL

Ukupan iznos je 118 ,kad podelis sa 5 dobijas maksimalni iznos 23.6 tako da svi iznosi ce biti mani od 24 kako si naveo .
Ja bi ti preporucio da napravis petlja od najveca kovanica i okrenes petlja po broj osoba tako da za svaka osoba sabiras iznos dok ne dodzes na do zadna kovanica .
Na primer imas 4 kovanice od po 5 e i prvi cetvoro ce dobiti po edna kovanica a 5 ti ce dobiti dve kovanice od po 2 eur i edna kovanica od 1 eur .
sledeci su kovanice od 2 eur i sad vec nisu 29 nego su 27 jer predhodno smo uzeli 2 da popunimo 5 ticu , i tako dalje do najmanja kovanica.

Avko 16.12.2024 16:21
Predmet:Re:rasporedi kovanice EXCEL

znaci FOR-NEXT petlja?

Gjoreski 17.12.2024 05:46
Predmet:Re:rasporedi kovanice EXCEL

mozez i for i=1 to 5
next i

zxz 17.12.2024 13:50
Predmet:Re:rasporedi kovanice EXCEL

PreuzmiIzvorni kôd (Visual Basic):
  1. Function Raspodjela(Optional BrojOsoba As Integer = 5)
  2.     Dim Kovanice As Object
  3.     Dim Vrijednosti As Object
  4.     Dim UkupnaVrijednost As Currency
  5.     Dim Apoen As Variant
  6.     Dim Podjela As Currency
  7.     Dim I, N As Integer
  8.     Dim KovanicaVrijednost As Currency
  9.     Dim BrojKovanica As Integer
  10.     Dim KovanicaRaspodjela As Integer
  11.     Dim OsobaIndex As Integer
  12.     Dim PodjelaPara() As Integer
  13.    
  14.     Set Kovanice = CreateObject("Scripting.Dictionary")
  15.     Kovanice.Add "50c", 24  ' 50 centi
  16.    Kovanice.Add "1e", 28   ' 1 euro
  17.    Kovanice.Add "2e", 29   ' 2 eura
  18.    Kovanice.Add "5e", 4    ' 5 eura
  19.    
  20.     Set Vrijednosti = CreateObject("Scripting.Dictionary")
  21.     Vrijednosti.Add "50c", 0.5
  22.     Vrijednosti.Add "1e", 1
  23.     Vrijednosti.Add "2e", 2
  24.     Vrijednosti.Add "5e", 5
  25.    
  26.     ReDim PodjelaPara(1 To BrojOsoba, 1 To 4)
  27.     UkupnaVrijednost = 0
  28.    
  29.     For Each Apoen In Kovanice.Keys
  30.         UkupnaVrijednost = UkupnaVrijednost + (Kovanice(Apoen) * Vrijednosti(Apoen))
  31.     Next Apoen
  32.  
  33.     Podjela = UkupnaVrijednost / BrojOsoba
  34.     OsobaIndex = 1
  35.    
  36.     For I = 1 To BrojOsoba
  37.         IznosPreostali = Podjela
  38.        
  39.         For Each Apoen In Array("5e", "2e", "1e", "50c")
  40.             KovanicaVrijednost = Vrijednosti(Apoen)
  41.             BrojKovanica = Kovanice(Apoen)
  42.             KovanicaRaspodjela = 0
  43.             Do While IznosPreostali >= KovanicaVrijednost And BrojKovanica > 0
  44.                
  45.                 If I = BrojOsoba Then
  46.                 KovanicaRaspodjela = BrojKovanica
  47.                 BrojKovanica = 0
  48.                 IznosPreostali = IznosPreostali - KovanicaVrijednost
  49.                 Else
  50.                 KovanicaRaspodjela = KovanicaRaspodjela + 1
  51.                 IznosPreostali = IznosPreostali - KovanicaVrijednost
  52.                 BrojKovanica = BrojKovanica - 1
  53.                 End If
  54.  
  55.             Loop
  56.             PodjelaPara(OsobaIndex, Application.Match(Apoen, Array("50c", "1e", "2e", "5e"), 0)) = _
  57.             PodjelaPara(OsobaIndex, Application.Match(Apoen, Array("50c", "1e", "2e", "5e"), 0)) + KovanicaRaspodjela
  58.             Kovanice(Apoen) = BrojKovanica
  59.         Next Apoen
  60.         OsobaIndex = OsobaIndex + 1
  61.     Next I
  62.    
  63.    
  64.     ' Ispis rezultata u Excel
  65.    Dim ImesSita As String
  66.     ImesSita = "Raspodjela kovanica"
  67.     Obrisi (ImesSita)
  68.     Dim ws As Worksheet
  69.     Set ws = ThisWorkbook.Sheets.Add
  70.     ws.Name = ImesSita
  71.    
  72.     ' Ispis naziva stupaca (kovanice)
  73.    ws.Cells(1, 1).Value = "Osoba"
  74.     ws.Cells(1, 2).Value = "50c"
  75.     ws.Cells(1, 3).Value = "1e"
  76.     ws.Cells(1, 4).Value = "2e"
  77.     ws.Cells(1, 5).Value = "5e"
  78.    
  79.     ' Ispis raspodjele po osobama
  80.    For I = 1 To BrojOsoba
  81.         ws.Cells(I + 1, 1).Value = "Osoba " & I
  82.         For N = 1 To 4
  83.             ws.Cells(I + 1, N + 1).Value = PodjelaPara(I, N)
  84.         Next N
  85.     Next I
  86.    
  87.     For I = 1 To BrojOsoba
  88.         Dim suma As Currency
  89.         suma = PodjelaPara(I, 1) * 0.5 + PodjelaPara(I, 2) * 1 + PodjelaPara(I, 3) * 2 + PodjelaPara(I, 4) * 5
  90.         ws.Cells(I + 1, 6).Value = "'  " & suma & " " & Chr(128)
  91.     Next I
  92.         Dim BrojApoena As Integer
  93.     For I = 2 To 5
  94.     BrojApoena = 0
  95.         For N = 2 To BrojOsoba + 1
  96.         BrojApoena = BrojApoena + ws.Cells(N, I).Value
  97.         Next N
  98.    ws.Cells(BrojOsoba + 2, I).Value = BrojApoena
  99.     Next I
  100.     MsgBox "Gotovo!", vbInformation
  101. End Function
  102. Function Obrisi(Naziv As String)
  103.     Dim ws As Worksheet
  104.    
  105.     On Error Resume Next
  106.     Set ws = ThisWorkbook.Sheets(Naziv)
  107.     On Error GoTo 0
  108.     If Not ws Is Nothing Then
  109.         Application.DisplayAlerts = False
  110.         ws.Delete
  111.         Application.DisplayAlerts = True
  112.     End If
  113. End Function

Avko 17.12.2024 16:34
Predmet:Re:rasporedi kovanice EXCEL

hvala, probat cu preraditi za vlastite potrebe.

Zapravo, osoba 1 ce imati samo 7 kovanica u dzepu, a osoba 5 ce imati 34 kovanice.
U slucaju da trebaju preplivati rijeku osoba 5 ce potonuti. hehehe

zxz 17.12.2024 17:38
Predmet:Re:rasporedi kovanice EXCEL

apravio sam ono sto si trazio.
Samo sam postavio opcionalno da moze mijenjati broj osoba a u kodu mozes mijenati broj kovanica.