View Full Version : Excel--> Formattazione condizionata HELP
Ciao a tutti,
esiste un modo per ottenere una formattazione condizionata (colorazione di una cella) nel caso in cui non si rispettino 11h di intervallo?
Per capirci
tra due celle devono trascorrere 11 ore di intervallo, nel caso in cui non trascorrano esistono delle regole per colorare la cella in cui non non sono rispettate le 11 ore
cella A1: 18.00-22.00
cella A2: 08.00-12.00
non trascorrono le 11 ore come è possibile colorar la cella in automatico?
john_revelator
03-10-2007, 00:24
Secondo me ti conviene usare due colonne, una per l'orario iniziale e una per quello finale, impostando il formato delle celle come personalizzato h.mm.
A questo punto usi la funzione ora
es. =ora(ora_fine - ora_inizio)
A questo punto dal menù formato applichi la formattazione condizionale con le condizioni minore di 11.00 e maggiore o uguale a 11.00
ciao. :)
Secondo me ti conviene usare due colonne, una per l'orario iniziale e una per quello finale, impostando il formato delle celle come personalizzato h.mm.
A questo punto usi la funzione ora
es. =ora(ora_fine - ora_inizio)
A questo punto dal menù formato applichi la formattazione condizionale con le condizioni minore di 11.00 e maggiore o uguale a 11.00
ciao. :)
buona idea... però poi mi sorge il problema di unire le due celle con un separatore (-) come si fa?
Per capirci
tra due celle devono trascorrere 11 ore di intervallo, nel caso in cui non trascorrano esistono delle regole per colorare la cella in cui non non sono rispettate le 11 ore
cella A1: 18.00-22.00
cella A2: 08.00-12.00
non trascorrono le 11 ore come è possibile colorar la cella in automatico?
Forse ti sei espresso male : la differenza la fai tra 2 celle o tra 2 orari all'interno della stessa cella ?
Cioè : [Cella A1] [18.00-22.00] >> 22-18=4 quindi se questa differenza è <11 lo sfondo-cella diventa "rosso" ?
Una cosa del genere ?
john_revelator
03-10-2007, 11:01
buona idea... però poi mi sorge il problema di unire le due celle con un separatore (-) come si fa?
=TESTO(A1;"h.mm")&"-"&TESTO(B1;"h.mm")
ovviamente al posto di a1 e b1 metti i riferimenti alle due celle che contengono gli orari di inizio e di fine.
Forse ti sei espresso male : la differenza la fai tra 2 celle o tra 2 orari all'interno della stessa cella ?
Cioè : [Cella A1] [18.00-22.00] >> 22-18=4 quindi se questa differenza è <11 lo sfondo-cella diventa "rosso" ?
Una cosa del genere ?
si scusami la differenza è tra le due celle (anche perchè nella stessa cella la differenza è sempre 4)
cella A1: 18.00-22.00
cella A2: 08.00-12.00
tra i due turni di lavoro non trascorrono 11 ore
si scusami la differenza è tra le due celle (anche perchè nella stessa cella la differenza è sempre 4)
cella A1: 18.00-22.00
cella A2: 08.00-12.00
tra i due turni di lavoro non trascorrono 11 ore
Mmm, facciamolo assomigliare ad una cosa che ho fatto tempo fa, così ti posso aiutare...
Diciamo che hai 2 colonne :
Colonna A:A "Orario1"
Colonna B:B "Orario2"
in A1 mettiamo "18.00-22.00"
in B1 mettiamo "08.00-12.00"
Così puoi incolonnare tutti gli orari che vuoi.
Le ore sono sempre "secche", ossia niente 18:30 ad esempio...
Può andare ?
Mmm, facciamolo assomigliare ad una cosa che ho fatto tempo fa, così ti posso aiutare...
Diciamo che hai 2 colonne :
Colonna A:A "Orario1"
Colonna B:B "Orario2"
in A1 mettiamo "18.00-22.00"
in B1 mettiamo "08.00-12.00"
Così puoi incolonnare tutti gli orari che vuoi.
Le ore sono sempre "secche", ossia niente 18:30 ad esempio...
Può andare ?
si son ore secche.... e son disposte cosi a colonne... però aiuto non ti seguo... ora che devo fare? perchè io nn riesco a far venire fuori sta casella colorata!!!:muro: :muro: :muro: :muro:
si son ore secche.... e son disposte cosi a colonne... però aiuto non ti seguo... ora che devo fare? perchè io nn riesco a far venire fuori sta casella colorata!!!:muro: :muro: :muro: :muro:
... Perchè era solo la prima parte della soluzione. :D
La seconda è questa :
Devi aprire l'editor VBA ( Visual Basic... ) di Excel e mettere questo codice in "Foglio1" :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim diff As Integer
Dim R As Range
For Each R In Sheets("Foglio1").Range("A:A")
On Error Resume Next
If R.Value = "" Then Exit For
diff = CInt(Mid(Range("B" & R.Row).Value, 1, 2)) - CInt(Mid(R.Value, 7, 2)) + 24
If diff >= 11 Then
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = xlNone
Else
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = 3
End If
Next R
End Sub
Ora, ogni volta che inserisci/modifichi valori su "Foglio1" questa routine controllerà tutte le differenze tra gli orari di lavoro presi a due a due dalle colonne [A:A] e [B:B], evidenziando in Rosso gli orari che non rispettano le 11 H di intervallo... ;)
... Perchè era solo la prima parte della soluzione. :D
La seconda è questa :
Devi aprire l'editor VBA ( Visual Basic... ) di Excel e mettere questo codice in "Foglio1" :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim diff As Integer
Dim R As Range
For Each R In Sheets("Foglio1").Range("A:A")
On Error Resume Next
If R.Value = "" Then Exit For
diff = CInt(Mid(Range("B" & R.Row).Value, 1, 2)) - CInt(Mid(R.Value, 7, 2)) + 24
If diff >= 11 Then
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = xlNone
Else
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = 3
End If
Next R
End Sub
Ora, ogni volta che inserisci/modifichi valori su "Foglio1" questa routine controllerà tutte le differenze tra gli orari di lavoro presi a due a due dalle colonne [A:A] e [B:B], evidenziando in Rosso gli orari che non rispettano le 11 H di intervallo... ;)
thanks stasera provo!!
thanks stasera provo!!
mmm nn va (mi colora la prima colonna...)
ora ci studio 1 pò sopra...
mmm nn va (mi colora la prima colonna...)
ora ci studio 1 pò sopra...
Che versione di Excel hai ?
Prova a togliere temporaneamente la riga "On Error Resume Next", e vedi se la routine produce errori...
Che versione di Excel hai ?
Prova a togliere temporaneamente la riga "On Error Resume Next", e vedi se la routine produce errori...
levando quello mi da errore su questa riga
" diff = CInt(Mid(Range("B" & R.Row).Value, 1, 2)) - CInt(Mid(R.Value, 7, 2)) + 24"
ho excel 2007
levando quello mi da errore su questa riga
" diff = CInt(Mid(Range("B" & R.Row).Value, 1, 2)) - CInt(Mid(R.Value, 7, 2)) + 24"
ho excel 2007
EH no. Non è possibile che non funzioni.
Io l'ho fatta/testata su Excel 2003. In Excel 2007 non ci son santi, deve andare...
Pensavo tu avessi Office '97 o giù di lì... :mbe:
1. Ti da errore forse perchè non rispetti il formato della data :
devi mettere in colonna A il primo orario [18.00-22.00] in QUESTO formato esatto. E in colonna B il secondo orario. Se un orario ha un numero solo ( 8.00 ) devi metterci lo "0" per rispettare il formato ( 08.00 ).
La routine prende gli orari a coppie ( intervallo B1-A1 / intervallo B2-A2 ecc... ).
2. Comunque, sei sicuro di aver installato anche il VBA ?
Per sviluppare su Office, il VBA va installato espressamente. E' nelle opzioni iniziali del setup, in "Componenti di Office", o qualcosa di simile...
EH no. Non è possibile che non funzioni.
Io l'ho fatta/testata su Excel 2003. In Excel 2007 non ci son santi, deve andare...
Pensavo tu avessi Office '97 o giù di lì... :mbe:
1. Ti da errore forse perchè non rispetti il formato della data :
devi mettere in colonna A il primo orario [18.00-22.00] in QUESTO formato esatto. E in colonna B il secondo orario. Se un orario ha un numero solo ( 8.00 ) devi metterci lo "0" per rispettare il formato ( 08.00 ).
La routine prende gli orari a coppie ( intervallo B1-A1 / intervallo B2-A2 ecc... ).
2. Comunque, sei sicuro di aver installato anche il VBA ?
Per sviluppare su Office, il VBA va installato espressamente. E' nelle opzioni iniziali del setup, in "Componenti di Office", o qualcosa di simile...
ok il formato data è uguale
ora mi sorge il dubbio sul VBA
devo recuperare il dvd di installazione........
ok il formato data è uguale
ora mi sorge il dubbio sul VBA
devo recuperare il dvd di installazione........
Prova anche a sostituire la routine precedente con questa :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim diff As Integer
Dim R As Range
For Each R In Sheets("Foglio1").Range("A:A")
On Error Resume Next
If R.Value = "" Then Exit For
diff = CInt(Mid(Range("B" & R.Row).Value, 1, 2)) - CInt(Mid(R.Value, 7, 2))
If diff < 0 Then diff = diff + 24
If diff >= 11 Then
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = xlNone
Else
Range("A" & R.Row & ":B" & R.Row).Interior.ColorIndex = 3
End If
Next R
End Sub
Ho aggiunto una piccola correzione...
ok
appena installo VBA provo anche quello
Provato ora anche su Excel 2007. A me funziona perfettamente.
53252
Usa l'ultima routine che ho postato. ;)
Provato ora anche su Excel 2007. A me funziona perfettamente.
53252
Usa l'ultima routine che ho postato. ;)
funziona anche a me.... solo che (ora mi odierai e mi f@ncul1zz3r@1 ihihih) servirebbe che funzionasse anche al cambio della giornata
per esempio, finisco al lavoro alle 24.00 e il giorno dopo ho un turno con ingresso alle 8 :-D (son 8 ore e non 11), quindi anche da notturno a diurno....
quindi le coppie che danno gli errori sono
x-21.00 ---------- 08.00-x
x-21.30 ---------- 08.30-x
x-22.00 ---------- 09.00-x
x-22.30 ---------- 09.30-x
x-23.00 ---------- 10.00-x
x-23.30 ---------- 10.30-x
x-24.00 ---------- 11.00-x
x-24.30 ---------- 11.30-x
e anche che la verifica fosse fatta su tutto il foglio e non solo sulle colonne A e B
funziona anche a me.... solo che (ora mi odierai e mi f@ncul1zz3r@1 ihihih) servirebbe che funzionasse anche al cambio della giornata
per esempio, finisco al lavoro alle 24.00 e il giorno dopo ho un turno con ingresso alle 8 :-D (son 8 ore e non 11), quindi anche da notturno a diurno....
quindi le coppie che danno gli errori sono
x-21.00 ---------- 08.00-x
x-21.30 ---------- 08.30-x
x-22.00 ---------- 09.00-x
x-22.30 ---------- 09.30-x
x-23.00 ---------- 10.00-x
x-23.30 ---------- 10.30-x
x-24.00 ---------- 11.00-x
x-24.30 ---------- 11.30-x
e anche che la verifica fosse fatta su tutto il foglio e non solo sulle colonne A e B
1. Infatti sto già iniziando a odiarti a morte. :D
2. Guarda che il mio codice funziona GIA' come dici tu. Ma queste ore di differenza tra un turno e l'altro devono essere almeno 8 o almeno 11 ? :confused:
3. Quindi gestire anche le mezz'ore ? Ma non potevi dirlo prima ? :D
3. "Su tutto il foglio" in che senso ?
Devi cercare di essere più chiaro e preciso... Non si capisce una mazza. ;)
Menomale che non sei un mio cliente ! :p
1. Infatti sto già iniziando a odiarti a morte. :D
2. Guarda che il mio codice funziona GIA' come dici tu. Ma queste ore di differenza tra un turno e l'altro devono essere almeno 8 o almeno 11 ? :confused:
3. Quindi gestire anche le mezz'ore ? Ma non potevi dirlo prima ? :D
3. "Su tutto il foglio" in che senso ?
Devi cercare di essere più chiaro e preciso... Non si capisce una mazza. ;)
Menomale che non sei un mio cliente ! :p
1. ihihih meno male che non sai dove abito... altrimenti venivi a menarmi
2. Le differenze tra un turno e l'altro deve essere di 11h
3. Si gestiamo anche le mezze ore
4. Nel senso che la macro funzioni su tutto il foglio e non solo sulla differenza tra le colonne A-B, ma anche B-C, C-D, D-E.....
ho cannato
le coppie che non danno errori sono
x-21.00 ---------- 08.00-x
x-21.30 ---------- 08.30-x
x-22.00 ---------- 09.00-x
x-22.30 ---------- 09.30-x
x-23.00 ---------- 10.00-x
x-23.30 ---------- 10.30-x
x-24.00 ---------- 11.00-x
x-24.30 ---------- 11.30-x
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.