Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    VBA per excel...domandina

    Ciao raga...!
    volevo realizzare una semplice routine in excel con vba...
    il problema è questo...
    con excel ho realizzato una schema che mi prepara le buste paga...
    una cella finale poi mi conta il totale per ogni dipendente...
    Poi, a mano con la calcolatrice, devo contare il taglio della banconata da richiedere al mio capo...mi spiego
    se il totale finale, di tutti i dipendenti, e 250 euro io richiedo al mio capo 2 banconote con taglio 100 € e 1 da 50 €...
    la mia domanda è:
    esiste un istruzione che mi farebbe questo procedimanto in automatico...

    GRAZIE MILLE DELLA COLLABORAZIONE

    BYEZ

  2. #2
    Per il VBA (con Excel) è meglio postare nel subforum apposito. Sposto il thread.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245

    Re: VBA per excel...domandina

    Originariamente inviato da savana1983
    Poi, a mano con la calcolatrice, devo contare il taglio della banconata da richiedere al mio capo...

    esiste un istruzione che mi farebbe questo procedimanto in automatico...
    Ti basterebbe riprodurre da programma il procedimento che segui utilizzando la calcolatrice

    Io l'ho pensata così:
    codice:
    Private Function BanconoteNecessarie(ByVal Somma As Single) As String
    Dim BanconoteDisponibili(7) As Integer
    Dim BanconoteRichieste(7) As Integer
    
    Dim NumTemp As Single
    Dim Cont As Integer
    
    
    '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(Cont) = CInt(Int(NumTemp))
      End If
      Cont = Cont + 1
    Loop
    
    
    'Messaggio
    BanconoteNecessarie = "Sono necessarie :" & vbCrLf & vbCrLf
    For Cont = 0 To UBound(BanconoteRichieste)
      If BanconoteRichieste(Cont) > 0 Then
        
        BanconoteNecessarie = BanconoteNecessarie & CStr(BanconoteRichieste(Cont))
        If BanconoteRichieste(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
    
    Private Sub Command1_Click()
    MsgBox BanconoteNecessarie(InputBox("Inserire la somma da analizzare", "Inserimento")), vbInformation, "Risultato"
    End Sub
    Per verificarne il funzionamento ti basta inserire un CommandButton.
    L'array BanconoteRichieste() contiene il numero di banconote corrispondente al taglio indicizzato da Cont.
    Ad esempio BanconoteRichieste(3) conterrà il numero di banconote del valore di BanconoteDisponibili(3) cioè 20.

    Ciao
    ... e non usare while wend è una sintassi deprecata

  4. #4
    grazie mille mabi...ho visto ed è ottimo...sai cosa...
    la divisione chiaramente la fa bene però c'è un problema che però non avevo specificato...
    in pratica mettiamo il caso che ci sono 20 dipendenti
    su un totale di 12500 euro magari uno o più dipendenti prendono meno di 100 euro però il programma non lo sa e fa la divisione dando come risultato 125 banconote da 100 euro...si potrebbe mettere una variabile in quel caso specifico....

    ANCORA GRAZIE MILLE...!

  5. #5
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Originariamente inviato da savana1983
    ANCORA GRAZIE MILLE...!
    Prego
    Originariamente inviato da savana1983
    in pratica mettiamo il caso che ci sono 20 dipendenti
    su un totale di 12500 euro magari uno o più dipendenti prendono meno di 100 euro però il programma non lo sa e fa la divisione dando come risultato 125 banconote da 100 euro...
    Questa volta non ho capito...
    Se io scompongo la cifra iniziale di 12500 euro in banconote ottengo 25 banconote da 500 euro.
    Puoi spiegarmi con un altro esempio il problema ?
    ... e non usare while wend è una sintassi deprecata

  6. #6
    in effetti non mi sono spiegato benissimo...
    in pratica...sarebbe ottimo se per ogni dipendente si dovrebbe eseguire questa istruzione e poi fare la somma di tutti...si potrebbe fare 'sta cosa...???

  7. #7
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    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
    ... e non usare while wend è una sintassi deprecata

  8. #8
    mabi sei un grande è proprio quello che volevo...
    senza impegno...tranquillamente...si potrebbe fare in modo che le paghe dei dipendenti che si inseriscono manualmente si possano prendere da un intervallo di celle sul foglio di lavoro...???
    ripeto senza impegno però...sei stato troppo gentile e bravo sino ad ora...

    GRAZIE MILLE....!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.