Originariamente inviato da savana1983
...sarebbe ottimo se per ogni dipendente si dovrebbe eseguire questa istruzione e poi fare la somma di tutti...si potrebbe fare 'sta cosa...???
Si, si può fare .
Ho deciso di farlo modificando l'array BanconoteRichieste() in uno bidimensionale. In questo modo il primo indice corrisponde al numero del dipendente mentre il seconodo al taglio della banconota.
Se ad esempio volessi sapere quante banconote da 10 euro sono necessarie al pagamento del terzo dipendente, mi basterrà leggere il valore relativo a BanconoteRichieste(2,4) :
codice:
Private Sub Command1_Click()
Const NumeroDipendenti = 3

Dim BanconoteRichieste() As Integer
Dim BanconoteTotali(0, 7) As Integer
Dim SommeDipendenti(NumeroDipendenti - 1) As Single

Dim Cont1 As Integer
Dim Cont2 As Integer
Dim Annullato As Boolean
Dim NumTemp As Single
Dim StrTemp As String


'Inserimento
For Cont1 = 0 To (NumeroDipendenti - 1)
  StrTemp = InputBox("Inserire somma per dipendente " & CStr(Cont1 + 1), "Inserimento")
  If Len(StrTemp) > 0 Then
    SommeDipendenti(Cont1) = CSng(StrTemp)
  Else
    Annullato = True
    Exit For
  End If
Next Cont1

If Annullato = False Then
  'Calcolo
  For Cont1 = 0 To (NumeroDipendenti - 1)
    NumTemp = SommeDipendenti(Cont1)
    Call CalcoloBanconoteNecessarie(NumTemp, NumeroDipendenti, Cont2, BanconoteRichieste())
    Cont2 = Cont2 + 1
  Next Cont1

  'Messaggio dipendenti
  For Cont1 = 0 To (NumeroDipendenti - 1)
    MsgBox BanconoteNecessarie(Cont1, BanconoteRichieste()), vbInformation, "Risultato per dipendente " & CStr(Cont1 + 1)
  Next Cont1

  'Messaggio totale
  For Cont1 = 0 To (NumeroDipendenti - 1)
    For Cont2 = 0 To 7
      BanconoteTotali(0, Cont2) = BanconoteTotali(0, Cont2) + BanconoteRichieste(Cont1, Cont2)
    Next Cont2
  Next Cont1
  MsgBox BanconoteNecessarie(0, BanconoteTotali()), vbInformation, "Risultato totale"
End If
End Sub


'Calcolo
Private Sub CalcoloBanconoteNecessarie(ByVal Somma As Single, ByVal NumeroDipendenti As Integer, _
                                ByVal Dipendente As Integer, ByRef BanconoteRichieste() As Integer)

Dim BanconoteDisponibili(7) As Integer

Dim NumTemp As Single
Dim Cont As Integer

ReDim Preserve BanconoteRichieste((NumeroDipendenti - 1&), UBound(BanconoteDisponibili))


'Array Banconote
BanconoteDisponibili(0) = 500
BanconoteDisponibili(1) = 100
BanconoteDisponibili(2) = 50
BanconoteDisponibili(3) = 20
BanconoteDisponibili(4) = 10
BanconoteDisponibili(5) = 5
BanconoteDisponibili(6) = 2
BanconoteDisponibili(7) = 1


'Calcolo banconote
Do Until Somma = 0!
  NumTemp = Somma / BanconoteDisponibili(Cont)
  If NumTemp >= 1! Then
    Somma = Somma - (Int(NumTemp) * BanconoteDisponibili(Cont))
    BanconoteRichieste(Dipendente, Cont) = CInt(Int(NumTemp))
  End If
  Cont = Cont + 1
Loop
End Sub


'Messaggio
Private Function BanconoteNecessarie(ByVal Dipendente As Integer, ByRef BanconoteRichieste() As Integer) As String
Dim Cont As Integer

BanconoteNecessarie = "Sono necessarie :" & vbCrLf & vbCrLf
For Cont = 0 To UBound(BanconoteRichieste, 2)
  If BanconoteRichieste(Dipendente, Cont) > 0 Then
    
    BanconoteNecessarie = BanconoteNecessarie & CStr(BanconoteRichieste(Dipendente, Cont))
    If BanconoteRichieste(Dipendente, Cont) = 1 Then
      BanconoteNecessarie = BanconoteNecessarie & " banconota da "
    Else
      BanconoteNecessarie = BanconoteNecessarie & " banconote da "
    End If
    
    Select Case Cont
      Case Is = 0
        BanconoteNecessarie = BanconoteNecessarie & "500 Euro"
      Case Is = 1
        BanconoteNecessarie = BanconoteNecessarie & "100 Euro"
      Case Is = 2
        BanconoteNecessarie = BanconoteNecessarie & "50 Euro"
      Case Is = 3
        BanconoteNecessarie = BanconoteNecessarie & "20 Euro"
      Case Is = 4
        BanconoteNecessarie = BanconoteNecessarie & "10 Euro"
      Case Is = 5
        BanconoteNecessarie = BanconoteNecessarie & "5 Euro"
      Case Is = 6
        BanconoteNecessarie = BanconoteNecessarie & "2 Euro"
      Case Is = 7
        BanconoteNecessarie = BanconoteNecessarie & "1 Euro"
    End Select
    BanconoteNecessarie = BanconoteNecessarie & vbCrLf
  End If
Next Cont
End Function