View Full Version : calendario Excel con turni
NicolaBT64
23-10-2009, 20:26
Ciao a tutti, poichè non ho grande dimestichezza con Excel 2007 e per il mio lavoro ripetitivo da turnista (ah ... quanto mi piacerebbe avere il tempo per imparare) ho bisogno di aiuto per creare un calendario annuale, che ovviamente cambi in ragione del passaggio tra un anno e l'altro.
Praticamente, una volta stampato deve avere la struttura (tascabile) che riporto nel file in allegato, con le seguenti caratteristiche:
1) Domeniche (in rosso),
2) i turni S (sera) P (pomeriggio) M (mattina) N (notte) RIP (riposo) devono ripetersi dal 1 gen al 31 dic di continuo, in ragione dei giorni del mese.
3) un tasto a macro deve permettermi di variare l'anno, con le conseguenze su esposte sui turni/giorni.
Qualcuno può aiutarmi in questo senso.
Grazie mille.
Nicola
avevi scritto la formula per estrarre il giorno quasi corretta
ma come ANNO avevi messo $C$1 che non era giusto.
la cella dove c'è l'anno è $B$1
correggi quella su tutto il foglio e ti prende il giorno dell'anno corretto.
per la domenica in rosso: vai su conditional formatting, seleziona la parte che ti imposta il formato in base ad una FORMULA e scrivi:
=weekday(b3)=1
(sorry ce l'ho in inglese e nn so di preciso come si chiami la formula in ita, ma è la stessa che hai usato nelle colonne nascoste ;)
non ho capito bene dove dici:"in ragione dei giorni del mese"
cosa vuol dire?
variano in base a qualcosa che non sia un puro susseguirsi normale?
a qualche gg è previsto un particolare turno?
cmq se ti basta che siano in ordine:
1- definisci il nome "turni" per il range:
=Foglio1!$D$3:$D$33;Foglio1!$G$3:$G$30;Foglio1!$J$3:$J$33;Foglio1!$M$3:$M$32;Foglio1!$P$3:$P$33;Foglio1!$S$3:$S$32;Foglio1!$V$3:$V$33;Foglio1!$Y$3:$Y$33;Foglio1!$AB$3:$AB$32;Foglio1!$AE$3:$AE$33;Foglio1!$AH$3:$AH$32;Foglio1!$AK$3:$AK$33
2- usa questa piccola macro
Sub turnazione()
Dim turni As Range
Dim Turno(), t As Variant
Turno = Array("S", "P", "M", "N", "RIP")
t = InputBox("Turno di partenza?" & vbCr & vbCr & "0 - S" & vbCr & "1 - P" & vbCr & "2 - M" & vbCr & "3 - N" & vbCr & "4 - RIP", "Seleziona il turno", "Inserisci il numero del turno")
For Each cell In Range("turni")
If t = 5 Then t = 0
cell.Value = Turno(t)
t = t + 1
Next cell
End Sub
e associala pure ad un bottone ;)
Raffaele53
24-10-2009, 13:02
Senza togliere nulla a zuper, più tardi "controllo la macro" solo per imparare....
Mi permetto di fare alcuni accorgimenti.
1) Le scritte in verde le hai scritte TU (se sono categoriche), potresti farlo in automatico (a meno che la macro di zuper serva a questo)
2) Per l'anno ci sarebbero altre due modalità, salvi in ogni foglio un ANNO preciso (per me è la soluzione migliore), oppure potresti sempre farlo tramite bottone.
Ps. Siccome mi piace e purtroppo sono impegnato (forse non ti servirà più), in novembre mi ripropongo per effettuarlo.
Senza togliere nulla a zuper, più tardi "controllo la macro" solo per imparare....
Mi permetto di fare alcuni accorgimenti.
1) Le scritte in verde le hai scritte TU (se sono categoriche), potresti farlo in automatico (a meno che la macro di zuper serva a questo)
2) Per l'anno ci sarebbero altre due modalità, salvi in ogni foglio un ANNO preciso (per me è la soluzione migliore), oppure potresti sempre farlo tramite bottone.
Ps. Siccome mi piace e purtroppo sono impegnato (forse non ti servirà più), in novembre mi ripropongo per effettuarlo.
:)
1) le scritte in verde dei turni sono inserite automaticamente tramite la macro, con inputbox per stabilire il valore di partenza
2) l'anno basta cambiarlo nella cella b1, quella del titolo della tabella, e viene "concatenato" con il mese e il giorno (presi dal range A3:a33) non so perchè l'ha fatto così, ma serve alla sua funzione quindi va bene ;D
funzione:
=DATE($B$1;$A$3;A3)
(anno,mese,giorno) ;)
Senza togliere nulla a zuper, più tardi "controllo la macro" solo per imparare....
la macro banalmente setta l'array (che come counter parte da 0)
prende tutte le celle del range name "turni" e in ogni cella ci mette il valore t dell'array, partendo da quello immesso nell'input box, e quando arriva a 5 riparte da 0 ;)
Raffaele53
24-10-2009, 19:04
Grazie delle spiegazioni.........
Ho sempre pensato che fino a 100 anni dovevo sempre imparare.....
Excel, credevo di essere bravino......, tante volte mi ritrovo schiappa.
Ciao
Grazie delle spiegazioni.........
Ho sempre pensato che fino a 100 anni dovevo sempre imparare.....
Excel, credevo di essere bravino......, tante volte mi ritrovo schiappa.
Ciao
siamo sempre tutti schiappe :D
abbiamo sempre qualcuno migliore davanti da cui imparare...
per 1 volta che "insegno" qualcosa io...ce ne sono 100 in cui "imparo" da qualcuno :D
ho inserito il file :)
ti ho aggiunto il lancio della macro in automatico al variare della cella B1, quella dell'anno.
ora basta che cambi quella e ti compare il popup per scegliere da che turno partire ;)
NicolaBT64
26-10-2009, 21:06
Grande Zuper, è perfetto ... manca solo una cosetta:
non hai tenuto conto che ogni 4 anni Feb ha 29 giorni e non 28, così tutto scalerebbe da lì in poi, ma nella cella Feb 29 non c'è alcun valore.
Ti dispiacerebbe modificare quel punto e reinviarmi il file ?
Poi vorrei chiederti come devo fare per vedere in chiaro la macro che opera su tutto il file, in modo che possa studiarmela.
Grazie mille ... sei un grande.
Grande Zuper, è perfetto ... manca solo una cosetta:
non hai tenuto conto che ogni 4 anni Feb ha 29 giorni e non 28, così tutto scalerebbe da lì in poi, ma nella cella Feb 29 non c'è alcun valore.
Ti dispiacerebbe modificare quel punto e reinviarmi il file ?
Poi vorrei chiederti come devo fare per vedere in chiaro la macro che opera su tutto il file, in modo che possa studiarmela.
Grazie mille ... sei un grande.
azz hai ragione...l'anno bisesto..
uhm domani ci guardo.
alt+f11 per entrare in vba :)
PS: ma non volevi imparare ad usare excel? :)
allora...apri il foglio...studia un pochino la macro (già c'è qualche indizio nei post precedenti ;) )
ti dico "in teoria" come farei a risolvere l'anno, lascio a te la pratica :D
1- setta un altro range name che includa il 29 febbraio
2- in una cella anche nascosta usa questa funzione http://support.microsoft.com/kb/214019/it per vedere se bisestile
3- sdoppia il ciclo IF della macro con un altro IF che gli fa controllare se la cella del punto 2 restituisce bisestile o no ;) a quel punto usi o il range name vecchio oppure quello creato dal punto 1 ;)
dai la spiegazione nn è facilissima...ma farlo in pratica è facile :D
buon lavoro!! ;)
NicolaBT64
28-10-2009, 10:03
:( ... ok ci provo.
Ancora grazie mille.
PS: Ah dimenticavo ... per imparare excel conosci qualche guida ?
dai provaci :) poi sarai mooooolto + soddisfatto :D
dipende a che livello di excel sei ;)
dai un occhio a questa e vedi come vai
http://www.tutorialpc.it/excelmenu.asp
Raffaele53
05-11-2009, 16:58
Personalmente non sono capace con le macro....
(non ho ancora avuto tempo per vederla)
Mi sono divertito a modificarlo in 10minuti, naturalmente non ha nessuna pretesa.
Si copia il foglio Vuoto in un'altro foglio che chiameremmo "2009"
Nella casella A1 (BLU) si mette il 1° turno dell'anno
Nella casella D1 si mette l'anno
Nelle caselle B3/B7 si può variare l'ordine dei turni (in pratica non dovrebbe mai cambiare durante l'anno)
L'anno bisestile c'era già..............
Ps se non ho fatto stupidate dovrebbe essere a posto.
Ho visto l'ultimo calendario postato e ti propongo delle modifiche cercando di mantenere un aspetto simile:
gli intervalli A3:A33 e N3:N33 inserisci il numero del giorno (da 1 a 31)
la cella A1 serve a stabilire il primo turno dell'anno e potrà contenere i numeri da 0 a 4
la cella B1 serve a contenere l'anno
nella cella B2 inserisci la formula: =DATA($B$1;RIF.COLONNA()-1;1) e trascinala a destra sino alla colonna M compresa
nella cella B3 inserisci la formula: =TESTO(B$2+$A3-1;"ggg")&"-"&INDICE({"S";"P";"M";"N";"RIP"};RESTO($A$1+B$2+$A3-1;5)+1) e trascinala a destra e in basso in modo da riempire l'intervallo B3:M33
cancella la formula per i giorni 31 dei mesi con 30 giorni e per i giorni da 31 a 29 per il mese di febbraio
in corrispondenza del 29 febbraio inserisci questa formula:=SE(RESTO($B$1;4)<>0;"";TESTO(C$2+$A31-1;"ggg")&"-"&INDICE({"S";"P";"M";"N";"RIP"};RESTO($A$1+C$2+$A31-1;5)+1))
seleziona l'intervallo B3:M33 e vai su "Formattazione condizionale" e utilizza questa formula per colorare in rosso le domeniche: =GIORNO.SETTIMANA(DATA($B$1;MESE(B$2);$A3))=1
Allego un file con il risultato che dovresti ottenere.
Tieni presente che:
oltre alle domeniche ho colorato in rosso anche le festività infrasettimanali utilizzando, per il calcolo della pasqua, la formula di Thomas Jansen
per selezionare l'anno e per far ruotare i turni ho utilizzato i pulsanti di selezione.
Ciao
Raffaele53
09-11-2009, 12:26
Molto valido.....
Mi ristudio la tipologia della formula perchè è molto interessante.
in corrispondenza del 29 febbraio inserisci questa formula:=SE(RESTO($B$1;4)<>0;"";TESTO(C$2+$A31-1;"ggg")&"-"&INDICE({"S";"P";"M";"N";"RIP"};RESTO($A$1+C$2+$A31-1;5)+1))
Occhio che nel 2100 non funziona... :sofico: :D :D
Raffaele53
09-11-2009, 13:31
Non desidero criticare, ma solo capire. Perchè non deve funzionare?
Non desidero criticare, ma solo capire. Perchè non deve funzionare?
http://www.globalgeografia.com/attualita/scheda_articolo.php?ID=26
:)
Non desidero criticare, ma solo capire. Perchè non deve funzionare?
Gli anni divisibili per 100 sono bisestili solo se multipli di 400.
Avrei dovuto scrivere:=SE(O(RESTO($B$1;400)=0;E(RESTO($B$1;100)<>0;RESTO($B$1;4)=0));TESTO(DATA($B$1;MESE(C$2);$A31);"ggg")&"-"&INDICE({"S";"P";"M";"N";"RIP"};RESTO($A$1+DATA($B$1;MESE(C$2);RIF.RIGA()-2);5)+1);"")
Considerato che manca ancora qualche anno preferisco la precedente.
Visto che siamo in argomento, anche la formula per il calcolo della pasqua dovrebbe essere valida solo per il periodo dal 1900 al 2203.
Sarà sufficiente o devo cercare un'altro algoritmo?:)
Ciao
Raffaele53
09-11-2009, 18:31
>>>venne stabilito che ogni 400 anni saltassero tre anni bisestili: così si correggeva, quasi del tutto, l'errore provocato dall'arrotondamento.
Mi scappa da ridere o piangere......non so
A quella maestra che mi ha dato 4 in storia/geografia, devo chiedere scusa.
Bravissimo solo in matematica ma questa opzione/eccezione, giuro non la sapevo fino a oggi.
Grazie
PS. i secoli sono bisestili solo se multipli di 400, questo motivazione mi doveva rispondere e io come un fesso a dire che anche 1700 1900 erano divisibili per 4.
ciao,
come si fa a creare un foglio excel per fare la turnazione di 10 persone che lavorano in un centro commerciale aperto 7/7 escluso determinate festività?
mi piacerebbe inserire i nomi, gli orari dei tre turni, l'anno con le festività e le chiusure ed avere un output.
grazie
ciao mauro
Ora abbiamo la discussione ufficiale; utilizza quella:
http://www.hwupgrade.it/forum/showthread.php?t=2102242
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.