Prikazi cijelu temu 17.12.2024 13:50
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Lokacija:Tuzla


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

Podrska samo putem foruma, jer samo tako i ostali imaju koristi od toga.