› Excel e gli applicativi Microsoft Office › Calcolo imposta di soggiorno
-
AutoreArticoli
-
Ciao a tutti, ho creato questo file che mi serve per calcolare la tassa di soggiorno degli ospiti pernottanti in hotel.
Nel file c'è anche una descrizione di quello che dovrebbe fare e le regole di imputazione della tassa.
Il problema lo ho naturalmente sul calcolo totale e soprattutto nel calcolo dell'imputazione parziale della tassa ecco alcuni esempi:
Regola imputazione:
1. Pagano la tassa gli ospiti dai 12 ai 65 anni compiuti (no 11; no 66) (si parziale)
2. Max notti imputabili: 15 notti
importo tassa: 1,50 € a notte
Data soggiorno: dal 07/06/2023 al 15/06/2023.
Data di nascita ospite: 10/06/1957
il totale della tassa in questo esempio è 4,50. Perchè pagherebbe dal 07/06 al 09/06 in quanto ha 65 anni mentre non pagherebbe dal 10/06 al 15/06 in quanto ha 66 anni.
ho provato un po di formule ma non sono riuscito spero che riusciate ad aiutarmi e grazie in anticipo
Allegati:
You must be logged in to view attached files.Io ci sto provando, giurin giurello 😀
ma naturalmente è nota la mia difficoltà con le formule... non arrivo ai livelli di antipatia mostrati da altri utenti però diciamo che non ci vado matto!
Presumo niente VBA, tanto per rendermi la vita difficile, e quindi in attesa di qualche buon Mastro Giostraio delle Formulae continuo a provarci. Magari più tardi riesco a postare qualcosa
ciao
sto strutturando le formule
questa sera spero riuscire a postarle
uso DATA.DIFF()
vecchio Frac provaci è un bel puzzle da fare
grazie a tuttiiiii
Immagino che bisogna innestare diversi casi di DATA.DIFF per trovare lo spartiacque tra data di riferimento e date di checkin-checkout. Forse ci sono formule magiche delle nuove versioni che aiutano di più... Frost su che versione di Excel hai detto che stai lavorando...?
office 365 su pc personale su altri pc sono diversi dipende
io il DATA.DIFF l'ho provato ma mi da errore e non sono riuscito a risolvere ahahahaha
Allego una mia soluzione.
Anche io come Francesco sono allergico alle formule, comunque ci ho provato.
Sono pronto agli insulti
Allegati:
You must be logged in to view attached files.Non ci riesco. Mi è venuto mal di testa
Con poche righe di codice però ho trovato questi risultati (in colonna G) 🙂
Non ho testato a fondo tutti i casi... per esempio temo succeda qualcosa di sbagliato con la mia macro quando check-in e check-out sono a cavallo di anno.
ciao
provami questa
=SE(E(DATA.DIFF($E2;B$2;"Y")=12;DATA.DIFF($E2;A$2;"Y")<12);LET(D;DATA(ANNO($B$2);MESE($E2);GIORNO($E2));SE(D=MEDIANA(D;$A$2;$B$2);($C$2+(DATA.DIFF($E2;A$2;"Yd")-365))*$J$1));SE(O($F2<12;$F2>65);"";$C$2*$J$1))
se va bene
vale solo per i 12 poi si deve fare per il 65
Sono pronto agli insulti
Anzi funziona molto meglio della mia prova (che sbaglia a conteggiare per esempio la riga 5, ma vedo altri errori)
provami questa
Peccato che io non posso provarla... la funzione LET non è ancora stata inventata per il mio povero Excel 2013
Ho scaricato il file e provato a capire come fare i calcoli ma c'ho capito ben poco anche perchè fai conto che la date di nascità vengono cambiate continuamente per fare il calcolo per ogni preventivo.
Quello che serve a me e che lui capisca:
1. Qaunti anni ha alla data del check-in (varie ipotesi: non la paga, la paga, la paga ma solo per alcuni giorni in base all'età)
2. mi faccia il totale
poi io cambio la data di soggiorno e le date di nascità e lui fa il calcolo di nuovo.
cmq non te ne faccio sicuramente una colpa non c'ho capito niente nemmeno io di come si deve comportare ahhahah grazie aldo sei stato super gentile
ciao
dove devo metterla questa formula?
ciao
dove vuoi io l'ho messa in g2 e trascinata in basso
ricorda che valuta fino a 12 per i 65 solo se va bene
Ma i valori giusti quali sarebbero? Io ho intanto aggiustato il mio codice perchè mi sono intestardito e ottengo questi valori 🙂

Ma i valori giusti quali sarebbero? Io ho intanto aggiustato il mio codice perchè mi sono intestardito e ottengo questi valori
1 problema: riproponete più volte la data check-in e check-out ma non serve gli ospiti in colonna fanno parte tutti della stessa camera
2 problema: la colonna imposta di soggiorno a notte l'avete trasformata in un totale singolo
3. secondo me vecchio frac ha beccato tutto correttamente i risultati sono corretti, l'unica cosa da correggere è la colonna check-in e check-out che non deve essere ripetuta 100 volte basta 1 sola riga. la colonna imposta di soggiorno a notte diventa imposta di soggiorno ospite per l'intero soggiorno
Bè ma il tuo file originale era così, e così è stato preso ad esempio da tutti 🙂
E' fuorviante che la cella F11 sia in verde (perché sembra che si debba fare il totale lì).
Ok per dire la mia in VBA allego il codice che ho utilizzato. Naturalmente non tiene conto delle tue ultime precisazioni, ma tanto era solo a scopo illustrativo (per esempio i range sarebbero da aggiustare per renderli dinamici e non legati allo specchietto dell'esempio).Ma so che tu hai tanta voglia di studiare e imparare VBA da solo, quindi SO che ti metterai d'impegno per fare le opportune modifiche
Option Explicit Sub test() Dim cell As Range Dim data_nasc As Date Dim check_out As Date Dim check_in As Date Dim eta_al_check_in As Integer Dim tassa_totale As Single Dim totale_complessivo As Single Dim d As Date For Each cell In Range("E2:E10") tassa_totale = 0 check_in = DateSerial(Year(Date), Month(Cells(cell.Row, 1)), Day(Cells(cell.Row, 1))) check_out = DateSerial(Year(Date), Month(Cells(cell.Row, 2)), Day(Cells(cell.Row, 2))) data_nasc = DateSerial(Year(Date), Month(cell), Day(cell)) eta_al_check_in = Cells(cell.Row, 6) For d = check_in To check_out - 1 tassa_totale = tassa_totale + 1.5 If eta_al_check_in < 12 Or eta_al_check_in > 66 Then tassa_totale = tassa_totale - 1.5 End If If d < data_nasc And eta_al_check_in = 12 Then tassa_totale = tassa_totale - 1.5 End If If d >= data_nasc And eta_al_check_in = 66 Then tassa_totale = tassa_totale - 1.5 End If Next Cells(cell.Row, 7) = tassa_totale totale_complessivo = totale_complessivo + tassa_totale Next Range("F11") = totale_complessivo End Subciao
veccchio trentino
i tuoi conti non mi tornano
riga 3 dell'immagine deve essere vuota
riga 7 deve essere 4.5
ecco la mia formula dovrebbe andare anche da te
=SE(O(F2>65;F2<12);"";SE(DATA(ANNO($B$2);MESE($E2);GIORNO($E2))=MEDIANA(DATA(ANNO($B$2);MESE($E2);GIORNO($E2));$A$2;$B$2);SE($F2=12;($C$2-(GIORNO(E2)-GIORNO($A$2)))*$J$1;($C$2+(GIORNO(E2)-GIORNO($B$2)))*$J$1);SE($E2>$B$2;"";$C$2*$J$1)))
una precisazione in F2 da trascinare in basso
=ARROTONDA(($B$2-E2)/365;0)
Allegati:
You must be logged in to view attached files.Ciao Gianfranco55 intanto grazie dell'aiuto.
Per quanto riguarda le righe segnalate a me risultano corrette e ti spiego.
Riga 3: è nato nel 2009 c'ho vuol dire che quando entra in hotel ha più di 12 anni. Regola la tassa si paga dai 12 ai 65 anni compiuti. Quindi paga la tassa per tutti i giorni tot 12 euro
Riga 7: 2010 nascita ha più di 12 anni stesso discorso.
Insomma il problema del computo parziale si ha solo nel caso dei nati nel 1957 (66 anni nn si paga)e nel 2011 (dai 12 anni si paga) che potrebbero compiere gli anni proprio nel periodo di soggiorno e quindi pagare solo una parte della tassa perche per alcuni giorni rientrano nell'età mentre in altri no. Non so se sono stato chiaro.
A me non interessa come è strutturato il file sentitevi liberi di modificarlo è il risultato che mi fa risparmiare tempo.
Le regole essenziali come format sono:
1 cella: check-in
2 cella: check out
3 colonna: tabella dove inserire le date di nascita degli ospiti della camera
4 colonna: tot tassa soggiorno per ospite singolo
5 cella: totale tassa soggiorno camera
Appena riesco provo i vari consigli e vi dico.
Bè ma il tuo file originale era così, e così è stato preso ad esempio da tutti
E' fuorviante che la cella F11 sia in verde (perché sembra che si debba fare il totale lì).
Ok per dire la mia in VBA allego il codice che ho utilizzato. Naturalmente non tiene conto delle tue ultime precisazioni, ma tanto era solo a scopo illustrativo (per esempio i range sarebbero da aggiustare per renderli dinamici e non legati allo specchietto dell'esempio).Sei proprio cattivello mettermi così in difficoltà addirittura dinamici non possono stare fermi? Ahahhaha
ciao
veccchio trentino

riga 3 dell'immagine deve essere vuota
riga 7 deve essere 4.5
Ecco il mio ragionamento.
Se parliamo delle righe di Excel e non dell'intervallo, la riga 3 corrisponde alla data di nascita 10/06/1957 e la riga 7 alla data 10/06/1958. Il primo ospite deve pagare dal 07/06/2023 (giorno di arrivo) fino al 09/06/2023 (ultimo giorno in cui avrà 65 anni) per un totale di 1,50*3 giorni = 4,50.
Il secondo ospite paga tutto il soggiorno (1,50*8 giorni = 12,00) perché compie 65 anni durante la sua permanenza.ecco la mia formula dovrebbe andare anche da te
Grazie. Adesso verifico 🙂
Ecco il mio ragionamento.
Se parliamo delle righe di Excel e non dell'intervallo, la riga 3 corrisponde alla data di nascita 10/06/1957 e la riga 7 alla data 10/06/1958. Il primo ospite deve pagare dal 07/06/2023 (giorno di arrivo) fino al 09/06/2023 (ultimo giorno in cui avrà 65 anni) per un totale di 1,50*3 giorni = 4,50. Il secondo ospite paga tutto il soggiorno (1,50*8 giorni = 12,00) perché compie 65 anni durante la sua permanenza.
Ragionamento corretto non ho capito la parte dell'intervallo
non ho capito la parte dell'intervallo
Stavo riflettendo sul riferimento, assoluto o relativo, della tabella in esame.
Le righe di cui parliamo sono quelle fisiche di Excel? (quelle automatiche, numerate da 1 in poi nella barra laterale sinistra)
O parliamo delle righe dell'intervallo? (cioè ogni range, detto intervallo in italiano, è una tabella di tot righe per tot colonne, naturalmente non sono numerate in automatico però ci si riferisce ad esse come se lo fossero).Nell'immagine sottostante:

se consideriamo l'intervallo di celle B7:C10, l'intervallo inizia alla riga fisica di Excel n° 7, ma quella riga è la riga relativa n° 1 dell'intervallo stesso (riferimento assoluto vs riferimento relativo).
Le regole essenziali come format sono:
1 cella: check-in
2 cella: check out
3 colonna: tabella dove inserire le date di nascita degli ospiti della camera
4 colonna: tot tassa soggiorno per ospite singolo
5 cella: totale tassa soggiorno camera
Appena riesco provo i vari consigli e vi dico.
Allego il file riveduto e corretto che fa quello che chiedi.
Unico problema, e qui ci vuole il mago delle formule, e' quando devi aggiungere una riga, volendo tu fisse A2 B2 C2 K1
Es devi aggiungere la riga 11. quando copi la formula da H10 in H11 excell aggiorna i riferimenti lle celle e A2 diventa A3, B2 diventaB3 e cosi' via.
Allegati:
You must be logged in to view attached files.Ciao Aldo, perchè per l'utente della seconda riga, che ha data nascita 10/06/1957, ti risulta un pagamento dovuto di 12 euro? L'ospite soggiorna dal 7 al 15 giugno e ha 65 anni fino al 10 giugno, quindi paga la tassa dal 7 al 9 compresi. Poi ne compie 66 e viene esentato dal pagamento.
-
AutoreArticoli
