› Sviluppare funzionalita su Microsoft Office con VBA › Calcolo consumi acqua in m^3
-
AutoreArticoli
-
Salve a tutti, mi sono iscritto al forum perchè credo mi possiate dare un aiuto. Vorrei creare su Excel una formula, meglio macro che mi consenta di attribuire i mi consenta di attribuire a ciascuna fascia di consumo di acqua, i m^3 consumati da un utente, in base ai giorni. Ad esempio se un utente consuma 30 m^3 in 80 giorni devo distribuire i m^3 tra le seguenti fasce di consumo annue : 1a da 0-30 m^3 annui; 2a da 31-90 m^3 annui; 3a da 91-130 m^3 annui; 4a oltre 130 m^3 annui. Che formula posso utilizzare per il calcolo? Facendo riferimento all'esempio sopra il calcolo sarebbe: divido 30( numero prima fascia) per 365 ( giorni dell'anno perchè le fasce sono riferite all'anno) e moltiplica per 80 (giorni di riferimento della bolletta) =6,57~7 m^3 alla prima fascia, poi divido 90 ( max ampiezza m^3 seconda fascia) per 365, moltiplicato per 80 =19,72-6,57 (mc^3 prima fascia) =13,15 mc^3 alla seconda fascia, mentre alla terza fascia verrebbero applicati i restanti m^3 cioè 10. Vi dico che se fossero stati 26 m^3 in 92 gg la ripartizione tra le fasce annue, deve risultare 1f=8m^3, 2f=15m^3, 3f=3m^3.
Inizialmente ho provato con formula se ma diventa impossibile. Come posso ripartire come nell'esempio con Excel?
edit by VF: ho tolto la sottolineatura a tutto il testo che era stata impostata presumo per errore
Allora ho creato due UDF, che ti posto, incolla il codice in un modulo del VBA.Inserisci la funzione che ti interessa in una cella, è inserisci nell'ordine i giorni dell'anno e dopo i metricubi consumati, nella cella ti ritornera il valore riferito a 30 giorni o 90 giorni.
`Option Explicit Public Const trenta = 30 / 365 Public Const novanta = 90 / 365 Public Function metricubi90(giorni As Long, consumo As Long) As Double Dim consumonovanta As Double Dim consumotrenta As Double consumotrenta = giorni * trenta consumonovanta = (giorni * novanta) - consumotrenta metricubi90 = consumonovanta End Function Public Function metricubi30(giorni As Long, consumo As Long) As Double Dim consumotrenta As Double consumotrenta = giorni * trenta metricubi30 = consumotrenta End Function `
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Per la sottolineatura è involontaria... 🙂
Albatros54: ti ringrazio per la risposta, ma non ho capito come procedere. Come devo inserire i giorni dell'anno e i m^3 consumati? Potresti farmi capire meglio, magari se è possibile con un print screen di Excel e spiegandomi i passaggi?
Inserendo i giorni dell'anno in Excel, l'esempio è applicabile anche ai casi in cui il consumo fosse riferito anche a giorni diversi da 30 o 90 come nl tuo esempi?
Considerando l'esempio che ti ho riportato nella richiesta, utilizzando il codice che mi hai fornito i risultati tornerebbero?
il consumo fosse riferito anche a giorni diversi da 30 o 90 come nl tuo esempi
30 e 90 non sono giorni, ma delle costanti del range di pagamento fino a 30 mc e fino a 90mc
ti posto un videotutorial come fare.
ciao
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Allegati:
You must be logged in to view attached files.Perfetto, ho capito come impostarla. Ti aggiungo inoltre che ho utilizzato una funzione se per distribuire correttamente i m^3 tra le fasce. Utilizzando il VBA esiste un modo per distribuire equamente i m^3 tra le varie fasce? Mi spiego meglio: io ho aggiunto un altro codice, sulla falsa riga di quello impostato da te, per i consumi fino a 130 m^3, mentre per i consumi oltre i 130 m^3 faccio la differenza tra i m^3 consumati dall'utente ed i m^3 distribuiti tra le varie fasce.
Se ad esempio avessi un consumo di 27 m^3 in 92 giorni, utilizzando il codice come impostato da te ed aggiungendo quello per i consumi fino a 130 m^3, come risultato mi verrebbe: 8 m^3 1 fascia; 15 m^3 2 fascia; 10 m^3 3 fascia. Sommandoli danno 33 m^2 diverso da 27 m^3 consumati. In questo caso il codice avrebbe dovuto fermarsi alla 3 fascia facendo la differenza tra 27-8-15= 4 m^3. E' possibile far si che il calcolo si arresti alla fascia corretta senza andare oltre i m^3 consumati?
Ciao a tutti.
Se non vuoi disturbare il VBA si può fare anche con formule.
Per comodità mia, nelle formule ho usato dei nomi definiti.
Inserendo in A8 e B8 il consumo e i relativi giorni, si ottengono i consumi divisi per fascia.
Allego file di esempio
Allegati:
You must be logged in to view attached files.zer0kelvin: ho provato ad impostare secondo la tua formula e funziona perfettamente.
albatros54: anche la tua impostazione mi torna, l'unica cosa ho provato ad impostarla come da tue indicazioni ma risulta quasi impossibile far applicare correttamente i consumi tra le varie fasce utilizzando vba. Secondo l'impostazione da te fornita ed aggiungendo i dati per consumi fino a 130 mc, non torna.
Comunque vi ringrazio per la disponibilità e per l'aiuto
-
AutoreArticoli