PDA

View Full Version : Excel--> Formattazione condizionata HELP


ellusu
02-10-2007, 19:40
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. :)

ellusu
03-10-2007, 07:46
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?

MarcoGG
03-10-2007, 08:57
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.

ellusu
03-10-2007, 15:34
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

MarcoGG
03-10-2007, 18:12
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 ?

ellusu
03-10-2007, 23:03
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:

MarcoGG
04-10-2007, 09:01
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... ;)

ellusu
04-10-2007, 10:09
... 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!!

ellusu
05-10-2007, 08:33
thanks stasera provo!!


mmm nn va (mi colora la prima colonna...)

ora ci studio 1 pò sopra...

MarcoGG
05-10-2007, 08:53
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...

ellusu
05-10-2007, 09:08
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

MarcoGG
05-10-2007, 09:28
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...

ellusu
05-10-2007, 09:31
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........

MarcoGG
05-10-2007, 09:39
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...

ellusu
05-10-2007, 09:48
ok

appena installo VBA provo anche quello

MarcoGG
05-10-2007, 12:28
Provato ora anche su Excel 2007. A me funziona perfettamente.

53252

Usa l'ultima routine che ho postato. ;)

ellusu
05-10-2007, 18:39
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

MarcoGG
05-10-2007, 19:09
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

ellusu
05-10-2007, 19:23
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