Discussione:
ricerca valori consecutivi in un range
(troppo vecchio per rispondere)
Armando
2007-04-25 11:09:42 UTC
Permalink
Ciao a tutti,

nell'intervallo W15:W45 ci sono indicate le ore di lavoro giornaliere.
Avrei bisogno di una formula che verifichi se le celle all'interno di
questo intervallo sono non vuote consecutivamente per 7,8,9 volte, in
modo da applicare delle maggiorazioni sulla paga oraria.
Immagino che sia necessario procedere con VBA, ma non riesco ad andare
avanti.

Qualcuno puo' aiutarmi?

Grazie
Armando
cucchiaino
2007-04-25 12:00:38 UTC
Permalink
ciao Armando.
Post by Armando
nell'intervallo W15:W45 ci sono indicate le ore di lavoro giornaliere.
Avrei bisogno di una formula che verifichi se le celle all'interno di
questo intervallo sono non vuote consecutivamente per 7,8,9 volte, in
modo da applicare delle maggiorazioni sulla paga oraria.
Immagino che sia necessario procedere con VBA, ma non riesco ad andare
avanti.
|W |
---+--+
15| 5|
16| 4|
17| 5|
18| 6|
19| |
20| 3|
21| |
22| 5|
23| |
24| 2|
25| 2|
26| 2|
27| |
28| |
29| |
30| 2|
31| |
32| |
33| |
34| |
35| |
36| |
37| |
38| 2|
39| 6|
40| 5|
41| 4|
42| 8|
43| 4|
44| 6|
45| 8|


dalla riga 31 alla riga 37 ci sono 7 celle vuote
cosa dovrebbe "darti" la macro?

il numero di celle vuote consecutive? (7)
comunicarti l'esistenza? (SI / NO) (VERO / FALSO)
indirizzo della prima cella? (W31)








()---cucchiaino
Tiziano Marmiroli
2007-04-25 13:06:58 UTC
Permalink
Post by cucchiaino
Post by Armando
nell'intervallo W15:W45 ci sono indicate le ore di lavoro giornaliere.
Avrei bisogno di una formula che verifichi se le celle all'interno di
questo intervallo sono non vuote consecutivamente per 7,8,9 volte, in
modo da applicare delle maggiorazioni sulla paga oraria.
Immagino che sia necessario procedere con VBA, ma non riesco ad andare
avanti.
dalla riga 31 alla riga 37 ci sono 7 celle vuote
A Armando interessano quelle non vuote, nell'esempio le 8 dalla W38 alla
W45.
Post by cucchiaino
cosa dovrebbe "darti" la macro?
il numero di celle vuote consecutive? (7)
comunicarti l'esistenza? (SI / NO) (VERO / FALSO)
indirizzo della prima cella? (W31)
Aggiungo altre domanda per Armando:

Devi individuare quali sono le celle non vuote consecutive? O devi solo
controllare se è presente almeno un gruppo di celle non vuote
consecutive? Se le celle consecutive fossero non 7 ma 8 o 9, cambiano le
maggiorazioni?
--
Tiziano Marmiroli
Microsoft MVP - Office System
cucchiaino
2007-04-25 15:01:23 UTC
Permalink
ciao Tiziano!
Post by Tiziano Marmiroli
Post by cucchiaino
dalla riga 31 alla riga 37 ci sono 7 celle vuote
A Armando interessano quelle non vuote, nell'esempio le 8 dalla W38 alla
W45.
E' vero.

Non ci resta che aspettare le risposte.


()---cucchiaino
Armando
2007-04-26 08:05:48 UTC
Permalink
Post by cucchiaino
ciao Tiziano!
Post by Tiziano Marmiroli
Post by cucchiaino
dalla riga 31 alla riga 37 ci sono 7 celle vuote
A Armando interessano quelle non vuote, nell'esempio le 8 dalla W38 alla
W45.
E' vero.
Non ci resta che aspettare le risposte.
()---cucchiaino
Eccomi...
Prima di tutto mi scuso per aver aperto un altro thread, ma ieri dopo
aver inviato il primo non l'ho visto pubblicato per diverso tempo e
temevo che il mio invio non fosse andato a buon fine.

cerco di essere piu' preciso.

La macro dovrebbe restituirmi il valore VERO/FALSO.
Non mi interessa sapere quali siano le celle consecutive, solo sapere
se ci sono celle non vuote consecutive, da 7 in poi.
Non c'e' differenza che siano 7 o piu', perche' comunque le
maggiorazioni verranno applicate manualmente, caso per caso (anche qui
vale la regola "la legge NON e' uguale per tutti...").
Nel caso dovessero esserci piu' di 1 gruppo di celle consecutive (ad
esempio W15:W24 e W26:W35, avro' comunque come risultato VERO

Ciao e grazie
Armando
cucchiaino
2007-04-26 20:50:05 UTC
Permalink
ciao Armando.
Post by Armando
Post by Tiziano Marmiroli
Post by cucchiaino
dalla riga 31 alla riga 37 ci sono 7 celle vuote
A Armando interessano quelle non vuote, nell'esempio le 8 dalla W38 alla
W45.
La macro dovrebbe restituirmi il valore VERO/FALSO.
In vba è semplice:

Se assegni il nome "TEATRO" alla zona oggetto di esame,
puoi crearti una funzione utente, per esempio così_


'---------------------------------
Function sette()
Dim una As Range
Dim t As Long

For Each una In Range("TEATRO")
If una.Value = vbNullString Then
t = 0
Else
t = t + 1
End If
If t > 6 Then
sette = True
Exit For
End If
Next


End Function
-----------------------------

Più interessante sarebbe stata una formula in Excel
di tipi matriciale, chissà se Ivano, Barbara, ecc...
ci stanno pensando ...!






()---cucchiaino
cucchiaino
2007-04-26 21:01:12 UTC
Permalink
ciao cucchiaino.
Post by cucchiaino
Function sette()
sostituisci con

Function sette() As Boolean


ma forse c'eri già arrivato.




()---cucchiaino
Armando
2007-04-27 05:34:07 UTC
Permalink
Post by cucchiaino
ciao Armando.
Post by Armando
Post by Tiziano Marmiroli
Post by cucchiaino
dalla riga 31 alla riga 37 ci sono 7 celle vuote
A Armando interessano quelle non vuote, nell'esempio le 8 dalla W38 alla
W45.
La macro dovrebbe restituirmi il valore VERO/FALSO.
Se assegni il nome "TEATRO" alla zona oggetto di esame,
puoi crearti una funzione utente, per esempio così_
'---------------------------------
Function sette()
Dim una As Range
Dim t As Long
For Each una In Range("TEATRO")
If una.Value = vbNullString Then
t = 0
Else
t = t + 1
End If
If t > 6 Then
sette = True
Exit For
End If
Next
End Function
-----------------------------
Più interessante sarebbe stata una formula in Excel
di tipi matriciale, chissà se Ivano, Barbara, ecc...
ci stanno pensando ...!
()---cucchiaino
grazie cucchiaino
la zona oggetto del controllo l'ho chiamata "LAVORO"
la variabile l'ho chiamata c

il codice che ho attualmente e' il seguente:

Function sette() As Boolean
Dim una As Range
Dim c As Long

For Each una In Range("LAVORO")
If una.Value = vbNullString Then
c = 0
Else
c = c + 1
End If
If c > 6 Then
sette = True
Exit For
End If
Next

End Function

ora vorrei visualizzare la funzione "sette" in una cella, che mi
restituisce il valore VERO/FALSO
come faccio?
cucchiaino
2007-04-27 05:54:55 UTC
Permalink
Post by cucchiaino
Function sette() As Boolean
[]
Post by cucchiaino
End Function
ora vorrei visualizzare la funzione "sette" in una cella, che mi
restituisce il valore VERO/FALSO
come faccio?
----------------

ciao Armando,

esattamente come le altre funzioni.
In una cella del foglio di Excel scrivi:

=SETTE()

e, in base all'esempio, ti restituirà VERO


()---cucchiaino
Armando
2007-04-27 06:00:25 UTC
Permalink
Post by cucchiaino
Post by cucchiaino
Function sette() As Boolean
[]
Post by cucchiaino
End Function
ora vorrei visualizzare la funzione "sette" in una cella, che mi
restituisce il valore VERO/FALSO
come faccio?
----------------
ciao Armando,
esattamente come le altre funzioni.
=SETTE()
e, in base all'esempio, ti restituirà VERO
()---cucchiaino
sono proprio a zero, lo so...
mi mettero' a studiare duro.
Grazie mille
Armando
Armando
2007-04-27 06:19:16 UTC
Permalink
Post by Armando
Post by cucchiaino
Post by cucchiaino
Function sette() As Boolean
[]
Post by cucchiaino
End Function
ora vorrei visualizzare la funzione "sette" in una cella, che mi
restituisce il valore VERO/FALSO
come faccio?
----------------
ciao Armando,
esattamente come le altre funzioni.
=SETTE()
e, in base all'esempio, ti restituirà VERO
()---cucchiaino
sono proprio a zero, lo so...
mi mettero' a studiare duro.
Grazie mille
Armando- Nascondi testo tra virgolette -
- Mostra testo tra virgolette -
mmmhhh
ho definito la funzione utente nel modulo1
scritta nel modo indicato sopra, cioe' cosi'


Function sette() As Boolean
Dim una As Range
Dim c As Long

For Each una In Range("LAVORO")
If una.Value = vbNullString Then
c = 0
Else
c = c + 1
End If
If c > 6 Then
sette = True
Exit For
End If
Next

End Function

ma mi restituisce sempre "FALSO", anche se le occorrenze non vuote
nell'intervallo che ho nominato "LAVORO" sono piu' di sette
consecutive.

Sbaglio qualcosa?
Ciao
Armando
cucchiaino
2007-04-27 06:45:35 UTC
Permalink
Post by cucchiaino
Function sette() As Boolean
Dim una As Range
Dim c As Long
For Each una In Range("LAVORO")
If una.Value = vbNullString Then
c = 0
Else
c = c + 1
End If
If c > 6 Then
sette = True
Exit For
End If
Next
End Function
ma mi restituisce sempre "FALSO", anche se le occorrenze non vuote
nell'intervallo che ho nominato "LAVORO" sono piu' di sette
consecutive.
Sbaglio qualcosa?
No.
Aggiungi una riga sotto la dichiarazione della funzione
Post by cucchiaino
Function sette() As Boolean
Application.Volatile



()---cucchiaino
Armando
2007-04-27 06:55:45 UTC
Permalink
Post by cucchiaino
Post by cucchiaino
Function sette() As Boolean
Dim una As Range
Dim c As Long
For Each una In Range("LAVORO")
If una.Value = vbNullString Then
c = 0
Else
c = c + 1
End If
If c > 6 Then
sette = True
Exit For
End If
Next
End Function
ma mi restituisce sempre "FALSO", anche se le occorrenze non vuote
nell'intervallo che ho nominato "LAVORO" sono piu' di sette
consecutive.
Sbaglio qualcosa?
No.
Aggiungi una riga sotto la dichiarazione della funzione
Post by cucchiaino
Function sette() As Boolean
Application.Volatile
()---cucchiaino- Nascondi testo tra virgolette -
- Mostra testo tra virgolette -
...sono mortificato
non (mi) funziona
scritta cosi'

Function sette() As Boolean
Application.Volatile
Dim una As Range
Dim c As Long

For Each una In Range("LAVORO")
If una.Value = vbNullString Then
c = 0
Else
c = c + 1
End If
If c > 6 Then
sette = True
Exit For
End If
Next

End Function

continua a restituire sempre "FALSO"

pardon
Armando
cucchiaino
2007-04-27 07:14:27 UTC
Permalink
Post by Armando
continua a restituire sempre "FALSO"
Strumenti > Opzioni > Linguetta "calcolo"
Metti la spunta su Automatico

()---cucchiaino
Armando
2007-04-27 07:23:14 UTC
Permalink
Post by cucchiaino
Post by Armando
continua a restituire sempre "FALSO"
Strumenti > Opzioni > Linguetta "calcolo"
Metti la spunta su Automatico
()---cucchiaino
non ho mai cambiato l'impostazione da automatico a manuale
e' gia' in automatico
Mauro Gamberini
2007-04-27 09:58:37 UTC
Permalink
Post by Armando
non ho mai cambiato l'impostazione da automatico a manuale
e' gia' in automatico
Public Function Sette() As Boolean

Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile

cont = 0
Set rng = Range("LAVORO")

For Each c In rng
If Len(c.Value) = 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True
Exit Function
End If
Next

Sette = False

End Function
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Armando
2007-04-27 12:20:57 UTC
Permalink
On 27 Apr, 11:58, "Mauro Gamberini"
Post by Mauro Gamberini
Post by Armando
non ho mai cambiato l'impostazione da automatico a manuale
e' gia' in automatico
Public Function Sette() As Boolean
Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile
cont = 0
Set rng = Range("LAVORO")
For Each c In rng
If Len(c.Value) = 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True
Exit Function
End If
Next
Sette = False
End Function
--
---------------------------
Mauro Gamberinihttp://www.riolab.org/
Ciao Mauro,
la tua fa l'esatto contrario
sempre "VERO"
mi restituisce "VERO" anche con tutti i campi vuoti, e non diventa mai
"FALSO", neanche con piu' di 7 celle consecutive con un valore.
Tra l'altro, leggendo la funziona ho l'impressione che non vada bene
esattamente per quello di cui ho bisogno.
Quando dice
For Each c In rng
If Len(c.Value) = 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True

in questo caso dovrebbe contare le celle vuote, non quelle non vuote,
o mi sbaglio?
Io vorrei che la Macro mi indicasse se ci sono valori non vuoti
consecutivi, da 7 in poi.

Grazie
Armando
Mauro Gamberini
2007-04-27 12:36:26 UTC
Permalink
Post by Armando
Io vorrei che la Macro mi indicasse se ci sono valori non vuoti
consecutivi, da 7 in poi.
Scusa ma non ho capito cosa vuoi.
Questa restituisce VERO se hai
7 o più valori(= *non vuoti*...) consecutivi nelle celle.
Ti conta una unica occorrenza.

Public Function Sette() As Boolean

Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile

cont = 0
Set rng = Range("LAVORO")

For Each c In rng
If Len(c.Value) <> 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True
Exit Function
End If
Next

Sette = False

End Function
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Mauro Gamberini
2007-04-27 12:51:57 UTC
Permalink
Meglio:

Public Function Sette() As Boolean

Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile

cont = 0
Set rng = Range("LAVORO")

For Each c In rng
If Len(c.Value) <> 0 Then
cont = cont + 1
If cont > 6 Then
Sette = True
Exit For
End If
Else
cont = 0
Sette = False
End If
Next

End Function
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
eliano
2007-04-27 13:48:02 UTC
Permalink
Post by Mauro Gamberini
Public Function Sette() As Boolean
Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile
cont = 0
Set rng = Range("LAVORO")
For Each c In rng
If Len(c.Value) <> 0 Then
cont = cont + 1
If cont > 6 Then
Sette = True
Exit For
End If
Else
cont = 0
Sette = False
End If
Next
End Function
If Len(c.Value) <> 0 Then
If Len(c.Value) = 0 Then
Ciao
Eliano
Mauro Gamberini
2007-04-27 14:06:01 UTC
Permalink
Post by Mauro Gamberini
Post by Mauro Gamberini
If Len(c.Value) <> 0 Then
If Len(c.Value) = 0 Then
Non lo so.
Non ho ancora capito.
Ma credo vada bene come ho postato io,
<>0.
Vuole le cosecutive piene(non vuote).... boh.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
eliano
2007-04-27 14:40:00 UTC
Permalink
Post by Mauro Gamberini
Post by Mauro Gamberini
Post by Mauro Gamberini
If Len(c.Value) <> 0 Then
If Len(c.Value) = 0 Then
Non lo so.
Non ho ancora capito.
Ma credo vada bene come ho postato io,
<>0.
Vuole le cosecutive piene(non vuote).... boh.
Vero Mauro, scusa per l'intervento a gamba tesa.:-))
Certo, se nelle celle interessate ci fosse una formula...
Ciao
Eliano
Mauro Gamberini
2007-04-27 14:56:02 UTC
Permalink
Post by eliano
Vero Mauro, scusa per l'intervento a gamba tesa.:-))
Certo, se nelle celle interessate ci fosse una formula...
Lui sta parlando di celle(valori) non vuote.

<lui>
Io vorrei che la Macro mi indicasse se ci sono valori non vuoti
consecutivi, da 7 in poi.
</lui>

Le celle con una formula sono *non vuote*.
*Presumo* ci siano celle vuote...
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
eliano
2007-04-27 13:00:04 UTC
Permalink
"Armando" ha scritto:

[cut]

Ciao Armando.
Strano che non funzioni, per cui il problema non dovrebbe essere la Function.
Controlla quindi:
1) Che i riferimenti del Range con il nome LAVORO siano corretti
2) Che i valori inseriti in TUTTO il predetto Range siano corretti, cioè
contengano o un valore significativo oppure NIENTE (uno spazio in bianco
rappresenta sempre un "qualcosa").:-))
Un cordiale saluto a tutti e auguri
Eliano
Armando
2007-04-27 14:08:28 UTC
Permalink
Post by eliano
[cut]
Ciao Armando.
Strano che non funzioni, per cui il problema non dovrebbe essere la Function.
1) Che i riferimenti del Range con il nome LAVORO siano corretti
2) Che i valori inseriti in TUTTO il predetto Range siano corretti, cioè
contengano o un valore significativo oppure NIENTE (uno spazio in bianco
rappresenta sempre un "qualcosa").:-))
Un cordiale saluto a tutti e auguri
Eliano
Ancora ciao,
perdonatemi l'insistenza (o se preferite l'ottusita')
non mi funziona
posso approfittare della vostra pazienza inviando il mio file a un
buon samaritano? :-)

Grazie
Armando
Mauro Gamberini
2007-04-27 14:13:27 UTC
Permalink
perdonatemi l'insistenza (o se preferite l'ottusita')
non mi funziona
***********************************

La mia ultima, l'hai provata?
Cosa non va?
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Armando
2007-04-27 14:27:52 UTC
Permalink
On 27 Apr, 16:13, "Mauro Gamberini"
Post by Armando
perdonatemi l'insistenza (o se preferite l'ottusita')
non mi funziona
***********************************
La mia ultima, l'hai provata?
Cosa non va?
Mauro,
con l'ultima tua mi restituisce #NOME?, sia con la stringa

If Len(c.Value) <> 0 Then
che con

If Len(c.Value) = 0 Then

il nome "LAVORO" si riferisce, ad esempio, alle celle A1:A20

inserisco la funzione
e poi in D1 scrivo =Sette()

e mi restituisce #NOME?


Ciao e grazie
Armando
Mauro Gamberini
2007-04-27 14:37:22 UTC
Permalink
Post by Armando
Mauro,
con l'ultima tua mi restituisce #NOME?, sia con la stringa
A me funziona.
La metti in un modulo, vero?
*Non* nel modulo di un foglio, ma in un
modulo(in vba: Inserisci-->Modulo).
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
eliano
2007-04-27 14:50:05 UTC
Permalink
Post by Mauro Gamberini
Post by Armando
Mauro,
con l'ultima tua mi restituisce #NOME?, sia con la stringa
A me funziona.
La metti in un modulo, vero?
*Non* nel modulo di un foglio, ma in un
modulo(in vba: Inserisci-->Modulo).
10 a 1 Foglio
eliano
2007-04-27 15:02:01 UTC
Permalink
Post by eliano
Post by Mauro Gamberini
Post by Armando
Mauro,
con l'ultima tua mi restituisce #NOME?, sia con la stringa
A me funziona.
La metti in un modulo, vero?
*Non* nel modulo di un foglio, ma in un
modulo(in vba: Inserisci-->Modulo).
10 a 1 Foglio
Invece 1 a 10 che scriva =sette invece di =sette()
Mauro Gamberini
2007-04-27 15:11:57 UTC
Permalink
Post by eliano
Invece 1 a 10 che scriva =sette invece di =sette()
Non credo

<lui>
inserisco la funzione
e poi in D1 scrivo =Sette()
</lui>
--
---------------------------
Mauro Gamberini(che chiude e domani parte per la Francia 8-))))))))))))
http://www.riolab.org/
Norman Jones
2007-04-27 15:26:05 UTC
Permalink
Ciao Eliano,
Post by eliano
10 a 1 Foglio
Scusa se mi intrometto, ma forse intendevi:

7 a 1 (Sette a uno)?


---
Regards,
Norman
Microsoft Excel MVP
eliano
2007-04-27 15:36:04 UTC
Permalink
Post by Norman Jones
Ciao Eliano,
Post by eliano
10 a 1 Foglio
7 a 1 (Sette a uno)?
La mia era una ipotesi su una possibile casistica; quella che tu riporti,
invece, è stato un dramma.:-((
Eliano
Armando
2007-04-27 17:58:10 UTC
Permalink
Ciao a tutti

il mio file e' fatto in questo modo:

nella colonna A >>> ora inizio turno (poniamo A1:A31 per i vari giorni
del mese)
nella colonna B >>> ora fine turno (B1:B31)
nella colonna C >>> ore lavorate (B#-A#)

le celle della colonna C, dalla 1 alla 31 le ho rinominate "LAVORO", e
contengono ovviamente una formula.

io vorrei che, nel caso una persona lavori in un mese consecutivamente
per 7 o piu' giorni la Macro me lo segnali, mettiamo con un VERO/
FALSO, in modo da poter applicare manualmente la maggiorazione (che
varia, come dicevo, caso per caso)

La Macro

Public Function Sette() As Boolean


Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile


cont = 0
Set rng = Range("LAVORO")


For Each c In rng
If Len(c.Value) <> 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True
Exit Function
End If
Next


Sette = False


End Function

Vi assicuro che l'ho messa in un modulo, e che ho scritto =sette()...
mi restituisce sempre il valore "VERO".
Il problema immagino che risieda nel fatto che comunque le celle sono
considerate non vuote perche' contengono una funzione, di conseguenza
la Macro riconosce la condizione sempre come vera.
In alternativa potremmo dire anche che se le celle del range "LAVORO"
hanno un valore > 0 per 7 o piu' volte consecutive, allora la
condizione e' vera.

Perfetto.... e come si scrive????
:-)
Ciao e grazie
Armando
Armando
2007-04-27 18:50:23 UTC
Permalink
Post by Mauro Gamberini
Public Function Sette() As Boolean
Dim cont As Long
Dim c As Range
Dim rng As Range
Application.Volatile
cont = 0
Set rng = Range("LAVORO")
For Each c In rng
If Len(c.Value) <> 0 Then
cont = cont + 1
End If
If cont > 6 Then
Sette = True
Exit Function
End If
Next
Sette = False
End Function
Ho provato con le celle vuote (senza funzioni) ed effettivamente la
Macro funziona, o quasi
perche' facendo altre prove ho riscontrato che comunque c'e' un
piccolo problema:
se, ad esempio, lavoro dal giorno 1 al 6 del mese, il giorno 7 riposo
e poi lavoro l'8 mi restituisce "VERO", mentre dovrebbe darmi comunque
"FALSO" perche' i 7 giorni sono non consecutivi.
E' evidente che avevo sottovalutato la questione, ma dall'alto della
mia ignoranza credevo fosse di facile soluzione.
Sono bene accetti altri suggerimenti.
Grazie
Armando
Mauro Gamberini
2007-04-27 18:58:48 UTC
Permalink
Post by Armando
Ho provato con le celle vuote (senza funzioni) ed effettivamente la
Macro funziona, o quasi
perche' facendo altre prove ho riscontrato che comunque c'e' un
se, ad esempio, lavoro dal giorno 1 al 6 del mese, il giorno 7 riposo
e poi lavoro l'8 mi restituisce "VERO", mentre dovrebbe darmi comunque
"FALSO" perche' i 7 giorni sono non consecutivi.
E' evidente che avevo sottovalutato la questione, ma dall'alto della
mia ignoranza credevo fosse di facile soluzione.
Sono bene accetti altri suggerimenti.
Come perdere tempo per risolvere un problema
che si rivela completamente diverso da quello esposto...

Mauro Gamberini
http://www.riolab.org/
Armando
2007-04-28 04:55:26 UTC
Permalink
On 27 Apr, 20:58, "Mauro Gamberini"
Post by Mauro Gamberini
Post by Armando
Ho provato con le celle vuote (senza funzioni) ed effettivamente la
Macro funziona, o quasi
perche' facendo altre prove ho riscontrato che comunque c'e' un
se, ad esempio, lavoro dal giorno 1 al 6 del mese, il giorno 7 riposo
e poi lavoro l'8 mi restituisce "VERO", mentre dovrebbe darmi comunque
"FALSO" perche' i 7 giorni sono non consecutivi.
E' evidente che avevo sottovalutato la questione, ma dall'alto della
mia ignoranza credevo fosse di facile soluzione.
Sono bene accetti altri suggerimenti.
Come perdere tempo per risolvere un problema
che si rivela completamente diverso da quello esposto...
Mauro Gamberinihttp://www.riolab.org/
Mauro, perdonami
ma credo che il tuo giudizio sia un po' affrettato.
Il problema mi sembrava abbastanza chiaro.
La Macro doveva creare una funzione che, in caso di presenza di ore
lavorate per sette o piu' giorni *consecutivi*, e sottolineo
consecutivi, avrebbe restituito il valore "VERO".
Mi dici gentilmente quale pensi che sia il mio post che espone
diversamente il problema?
Tutto questo, ovviamente, ringraziandoti comunque per il tempo
dedicato alla soluzione di questo problema.


Ciao
Armando
Norman Jones
2007-04-28 09:09:33 UTC
Permalink
Ciao Armando,

'----------------
La Macro doveva creare una funzione che, in caso di presenza di ore
lavorate per sette o piu' giorni *consecutivi*, e sottolineo
consecutivi, avrebbe restituito il valore "VERO".
'----------------

Prova la funzione utente (UDF):

'=============>>
Public Function SevenPlus(Rng) As Boolean
Dim rCell As Range
Dim iCtr As Long

For Each rCell In Rng.Cells
With rCell
If IsNumeric(.Value) And .Value > 0 Then
iCtr = iCtr + 1
Else
iCtr = 0
End If
End With
If iCtr = 7 Then
SevenPlus = True
Exit Function
End If
Next rCell
End Function
'<<=============


---
Regards,
Norman
Microsoft Excel MVP
Armando
2007-04-28 11:35:31 UTC
Permalink
Post by Norman Jones
Ciao Armando,
'----------------
La Macro doveva creare una funzione che, in caso di presenza di ore
lavorate per sette o piu' giorni *consecutivi*, e sottolineo
consecutivi, avrebbe restituito il valore "VERO".
'----------------
'=============>>
Public Function SevenPlus(Rng) As Boolean
Dim rCell As Range
Dim iCtr As Long
For Each rCell In Rng.Cells
With rCell
If IsNumeric(.Value) And .Value > 0 Then
iCtr = iCtr + 1
Else
iCtr = 0
End If
End With
If iCtr = 7 Then
SevenPlus = True
Exit Function
End If
Next rCell
End Function
'<<=============
---
Regards,
Norman
Microsoft Excel MVP
La funzione mi restituisce #VALORE!
questo controllo deve farlo su un intervallo che ho chiamato "LAVORO"
ho inserito

set rCell = range("LAVORO)

ma mi da sempre lo stesso risultato

Ciao
Armando
Norman Jones
2007-04-28 12:01:23 UTC
Permalink
Ciao Armando,

'-----------------
La funzione mi restituisce #VALORE!
questo controllo deve farlo su un intervallo che ho chiamato "LAVORO"
ho inserito

set rCell = range("LAVORO)

ma mi da sempre lo stesso risultato
'-----------------

Il codice funziona a me senza alcun problema, sia utilizzato
come:

=SevenPlus(Lavoro)

che come

=SevenPlus(A1:A100)

Potrei mandarti il mio file di esempio in risposta ad
un'e-mail:

***@NOSPAMbtconnectDOTcom

(Cancella "NOSPAM" e sostituisci "DOT" con un punto)

In alternativa, potresti mandami il tuo file problematico.


---
Regards,
Norman
Microsoft Excel MVP
Armando
2007-04-28 12:05:56 UTC
Permalink
Post by Armando
set rCell = range("LAVORO)
intendevo
set fCell = range("LAVORO")

Ciao
Armando
Norman Jones
2007-04-28 12:11:20 UTC
Permalink
Ciao Armando,

'-------------------
Post by Armando
La funzione mi restituisce #VALORE!
questo controllo deve farlo su un intervallo che ho chiamato "LAVORO"
ho inserito
set rCell = range("LAVORO)
ma mi da sempre lo stesso risultato
intendevo
set fCell = range("LAVORO")
'-------------------

Oltre alla mia risposta precedente, non credo sia
necessario modificare la sintassi della mia funzione


---
Regards,
Norman
Microsoft Excel MVP
Armando
2007-04-28 14:21:17 UTC
Permalink
Ciao a tutti,
ho provato la funzione di Norman su un documento fatto ex novo.
Funziona
Non funziona nel mio file, dove nelle celle da controllare (W15:W45,
intervallo che ho chiamato "LAVORO") c'e' una somma di due differenze.
Non ne conosco il motivo, ma il mio problema e' risolto comunque,
facendo un passaggino in piu' (imposto la cella Y15=W15 e giu' fino a
Y45
e applico la formula sull'intervallo Y15:Y45

Mille grazie,

Armando
cucchiaino
2007-04-28 14:29:29 UTC
Permalink
Post by Armando
nella colonna A >>> ora inizio turno (poniamo A1:A31 per i vari giorni
del mese)
nella colonna B >>> ora fine turno (B1:B31)
nella colonna C >>> ore lavorate (B#-A#)
ciao Armando.
Se una persona non lavora, inserisci lo stesso qualcosa in colonna A?
Se la risposta è NO allora prova ad applicare il nome di zona LAVORO
su questa colonna invece che sulla C.

()---cucchiaino
Norman Jones
2007-04-27 15:22:05 UTC
Permalink
Ciao Eliano,

Scusa se mi intrometto, ma non intendevi:
--
---
Regards,
Norman
Post by eliano
Post by Mauro Gamberini
Post by Armando
Mauro,
con l'ultima tua mi restituisce #NOME?, sia con la stringa
A me funziona.
La metti in un modulo, vero?
*Non* nel modulo di un foglio, ma in un
modulo(in vba: Inserisci-->Modulo).
10 a 1 Foglio
eliano
2007-04-27 14:42:04 UTC
Permalink
Post by Armando
Post by eliano
[cut]
Ciao Armando.
Strano che non funzioni, per cui il problema non dovrebbe essere la Function.
1) Che i riferimenti del Range con il nome LAVORO siano corretti
2) Che i valori inseriti in TUTTO il predetto Range siano corretti, cioè
contengano o un valore significativo oppure NIENTE (uno spazio in bianco
rappresenta sempre un "qualcosa").:-))
Un cordiale saluto a tutti e auguri
Eliano
Ancora ciao,
perdonatemi l'insistenza (o se preferite l'ottusita')
non mi funziona
posso approfittare della vostra pazienza inviando il mio file a un
buon samaritano? :-)
Ciao Armando.
Per caso nelle celle testate sono inserite formule o solo valori digitati?
Eliano
Armando Di Grado
2007-05-01 22:50:02 UTC
Permalink
nelle celle sono inserite formule
ciao
armando
Post by eliano
Post by Armando
Post by eliano
[cut]
Ciao Armando.
Strano che non funzioni, per cui il problema non dovrebbe essere la Function.
1) Che i riferimenti del Range con il nome LAVORO siano corretti
2) Che i valori inseriti in TUTTO il predetto Range siano corretti, cioè
contengano o un valore significativo oppure NIENTE (uno spazio in bianco
rappresenta sempre un "qualcosa").:-))
Un cordiale saluto a tutti e auguri
Eliano
Ancora ciao,
perdonatemi l'insistenza (o se preferite l'ottusita')
non mi funziona
posso approfittare della vostra pazienza inviando il mio file a un
buon samaritano? :-)
Ciao Armando.
Per caso nelle celle testate sono inserite formule o solo valori digitati?
Eliano
Loading...