Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Somma.più.se con funzione Frequenza

379 views
Skip to first unread message

Bruno.62

unread,
Apr 9, 2016, 5:34:51 AM4/9/16
to
Excel 2010.
Ciao a tutti, ho dodici fogli corrispondenti ai mesi dell'anno con i
giorni del mese su riga, come rappresentato sotto, nei quali per ogni
addetto è stato definito il nome > "NomeAddetto" , come di seguito


=Riposi!$C$18:$AG$18;Riposi!$C$36:$AG$36;Riposi!$C$54:$AG$54;Riposi!$C$72:$AG$72;Riposi!$C$90:$AG$90
e così via per tutti i fogli dell'anno

Per concludere vorrei unire le due formule che seguono affinchè si
possano contare le frequenze solo fino ad una data da me stabilita e non
per tutti i fogli dell'anno. questo mi permetterebbe di fare la
programmazione di tutti i mesi, facendo sommare solo fino al mese o
giorno di mio interesse, in modo da evitare confusione per i riposi da
recuperare.



Formule di esempio funzionanti singolarmente:

=SOMMA.PIÙ.SE(Aprile!B7:AF7;Aprile!$B$3:$AF$3;"<="&$AX$3)

' $AX$3 è la data da me inserita in una cella per confrontare con le
date da ricercare nella riga di aprile-16 e conteggiare la frequenza.


=SOMMA(SE(FREQUENZA(NomeAddetto;NomeAddetto)=1;1))

' conta la frequenza di una data, utilizzata per calcolare se ci sono
riposi da recuperare





> aprile-16 ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab
> NomeAddetto 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
> Turno MD MD RS MD PA MD MD MD MD RS MD MD LA MD MA MA RS MA MA MA MD MA MA RS RF MD MA MA MD MD

Mille Grazie, Bruno

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus

Bruno

unread,
Apr 9, 2016, 11:07:31 AM4/9/16
to
"Bruno.62" <mus...@virgilio.it> ha scritto:
> Excel 2010.
> Ciao a tutti, ho dodici fogli corrispondenti ai mesi dell'anno con i
> giorni del mese su riga, come rappresentato sotto, nei quali per ogni
> addetto č stato definito il nome > "NomeAddetto" , come di seguito
>
>
> =Riposi!$C$18:$AG$18;Riposi!$C$36:$AG$36;Riposi!$C$54:$AG$54;Riposi!$C$72:$AG$72;Riposi!$C$90:$AG$90
> e cosě via per tutti i fogli dell'anno
>
> Per concludere vorrei unire le due formule che seguono affinchč si
> possano contare le frequenze solo fino ad una data da me stabilita e non
> per tutti i fogli dell'anno. questo mi permetterebbe di fare la
> programmazione di tutti i mesi, facendo sommare solo fino al mese o
> giorno di mio interesse, in modo da evitare confusione per i riposi da
> recuperare.
>
>
>
> Formule di esempio funzionanti singolarmente:
>
> =SOMMA.PIŮ.SE(Aprile!B7:AF7;Aprile!$B$3:$AF$3;"<="&$AX$3)
>
> ' $AX$3 č la data da me inserita in una cella per confrontare con le
> date da ricercare nella riga di aprile-16 e conteggiare la frequenza.
>
>
> =SOMMA(SE(FREQUENZA(NomeAddetto;NomeAddetto)=1;1))
>
> ' conta la frequenza di una data, utilizzata per calcolare se ci sono
> riposi da recuperare
>
>
>
>
>
>> aprile-16 ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab
>> NomeAddetto 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
>> Turno MD MD RS MD PA MD MD MD MD RS MD MD LA MD MA MA RS MA MA MA MD MA MA RS RF MD MA MA MD MD
>
> Mille Grazie, Bruno
>
> ---
> Questa e-mail č stata controllata per individuare virus con Avast antivirus.
> https://www.avast.com/antivirus
>
>

Ho scordato di precisare che le date da contare sono inserite
nella (riga) cella sotto il turno, esempio:
RR
10/04/16

Grazie
--
Bruno.62

paoloard

unread,
Apr 9, 2016, 12:21:08 PM4/9/16
to


"Bruno" ha scritto nel messaggio news:neb5rg$f81$1...@gioia.aioe.org...

....
>
>> aprile-16 ven sab dom lun mar mer gio ven sab dom lun mar mer gio ven sab
>> dom lun mar mer gio ven sab dom lun mar mer gio ven sab
>> NomeAddetto 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
>> 21 22 23 24 25 26 27 28 29 30
>> Turno MD MD RS MD PA MD MD MD MD RS MD MD LA MD MA MA RS MA MA MA MD MA
>> MA RS RF MD MA MA MD MD
>
> Mille Grazie, Bruno
>
> ---
> Questa e-mail è stata controllata per individuare virus con Avast
> antivirus.
> https://www.avast.com/antivirus
>
>

Ho scordato di precisare che le date da contare sono inserite
nella (riga) cella sotto il turno, esempio:
RR
10/04/16

Grazie
--
Bruno.62


Credo sia meglio che tu metta a disposizione il tuo file (OneDrive, DropBox)
altrimenti ci costringi a ricreare la tua tabella rischiando di sbagliare
righe, colonne e dati.
Se sei d'accordo comunicaci il link per scaricarlo.
paoloard

Bruno

unread,
Apr 10, 2016, 7:44:13 AM4/10/16
to
"paoloard" <xxp...@alice.it> ha scritto:
______
Scusa il ritardo nel rispondere.
Il file è pesantissimo, circa 30MB, appena ho 2 minuti cerco di
snellirlo e poi ricontatto per il link.

Ciao
--
Bruno.62

paoloard

unread,
Apr 10, 2016, 10:48:46 AM4/10/16
to


"Bruno" ha scritto nel messaggio news:nedea5$lu7$1...@gioia.aioe.org...

"...
>
>
> Credo sia meglio che tu metta a disposizione il tuo file (OneDrive,
> DropBox)
> altrimenti ci costringi a ricreare la tua tabella rischiando di sbagliare
> righe, colonne e dati.
> Se sei d'accordo comunicaci il link per scaricarlo.
> paoloard
>
>
______
Scusa il ritardo nel rispondere.
Il file è pesantissimo, circa 30MB, appena ho 2 minuti cerco di
snellirlo e poi ricontatto per il link.
Ciao
--
Bruno.62



Ok
ciao
paoloard

Bruno

unread,
Apr 11, 2016, 2:14:54 PM4/11/16
to
"paoloard" <xxp...@alice.it> ha scritto:
----
Ciao Paolo, non ho mai usato Google drive; spero di aver
effettuato la corretta procedura per condividere il file. Ecco il
link


https://drive.google.com/folderview?id=0BzFPa3YYiIU4MlBnZGdMOF80U28
--
Bruno.62

paoloard

unread,
Apr 12, 2016, 9:35:17 AM4/12/16
to


"Bruno" ha scritto nel messaggio news:negpip$9id$1...@gioia.aioe.org...

....----
Ciao Paolo, non ho mai usato Google drive; spero di aver
effettuato la corretta procedura per condividere il file. Ecco il
link

https://drive.google.com/folderview?id=0BzFPa3YYiIU4MlBnZGdMOF80U28
--
Bruno.62


Ciao Bruno.
Ho visto il tuo esempio.
Cosa rappresentano le date presenti in seconda riga degli addetti?
Sono i riposi da conteggiare?
Indipendentemente dalle formule da te utilizzate, qual'č il criterio logico
per calcolare i riposi?
Ciao paoloard

paoloard

unread,
Apr 12, 2016, 9:42:29 AM4/12/16
to


"paoloard" ha scritto nel messaggio news:neitcc$ca9$1...@dont-email.me...



"Bruno" ha scritto nel messaggio news:negpip$9id$1...@gioia.aioe.org...

....----
Ciao Paolo, non ho mai usato Google drive; spero di aver
effettuato la corretta procedura per condividere il file. Ecco il
link

https://drive.google.com/folderview?id=0BzFPa3YYiIU4MlBnZGdMOF80U28
--
Bruno.62


Ciao Bruno.
Ho visto il tuo esempio.
Cosa rappresentano le date presenti in seconda riga degli addetti?
Sono i riposi da conteggiare?
Indipendentemente dalle formule da te utilizzate, qual'è il criterio logico

Bruno.62

unread,
Apr 12, 2016, 1:10:03 PM4/12/16
to
[CUT]

Ciao Paolo, eccomi a tua disposizione.

Lo specchio che hai visto mediante formule/collegamenti prende i dati
dai 12 specchi mensili dei servizi, straordinari, ecc.. Per poterti
inviare un solo foglio ho copiato tutte le celle del foglio ed ho
incollato i valori; tanto è lo stesso.
Come potrai notare nella primissima riga in alto ci sono le "F" che
stanno per festivo e "R" per riposo nel caso della domenica. Sotto il
turno/servizio del giorno sono presenti le date nel caso si lavori un
giorno festivo o la domenica (colore blu), mentre per i RRF o RRS
recuperati, le date sono di colore rosso. Il conteggio avviene con la
=SOMMA(SE(FREQUENZA(Nome1;Nome1)=1;1)) che somma le date singole
trovate, infatti le date inserite due volte stanno ad indicare che il
riposo è stato recuperato. Chiaramente il giorno festivo in cui si
lavora la data è inserita automaticamente con formula, mentre il giorno
in cui si recupera il riposo si deve inserire la data del riposo da
recuperare, esempio del mese di gennaio: lavoro il 01/012016, recupero
l'11/01/2016. Tale metodo funziona bene, ma ha due problemi:
1) se per errore vengono segnate due date oltre a quella automatica del
giorno festivo, rischi di far recuperare un riposo in più, per cui èuso
un'altra formula non ancora presente nel foglio, che verifica e da
avviso nel caso di 3 o più date uguali.
2) se programmi più mesi, la formula
=SOMMA(SE(FREQUENZA(Nome1;Nome1)=1;1)) calcola su tutto quello che
trova, ecco perchè cercavo di trovare una soluzione integrando questa
formula in
=SOMMA.PIÙ.SE(Nome1;SOMMA(SE(FREQUENZA(Nome1;Nome1)=1;1));DATE_Mesi;"<="
& $AI$21).

Nome1 e DATE_Mesi, come avrai sicuramente visto, sono nomi definiti da
menu "Formule" > "Gestione nomi".

Spiegazione lunga ma necessaria.

paoloard

unread,
Apr 17, 2016, 12:36:32 PM4/17/16
to


"Bruno.62" ha scritto nel messaggio news:neja55$arl$1...@gioia.aioe.org...

[CUT]

Ciao Paolo, eccomi a tua disposizione.

......



Spiacente Bruno ma, dopo attenta analisi (credo), ho concluso che non è
possibile trovare una soluzione con le normali formule di Excel.
Peraltro, il tuo metodo di attribuire Nomi a intervalli discontinui è
sbagliato perché Excel non lo consente, almeno nel modo da te applicato. Si
potrebbe anche fare con formule ma diventerebbe estremamente complicato e
farraginoso.
Occorre quindi una macro che accodi le diverse date, entro la data limite, e
quindi esegua, su questo range, il controllo di frequenza.
Poiché io non sono esperto in VBA passo la palla ad altri utenti del NG
molto ferrati in materia e che spero mi leggano (appello a, tanto per
citarne uno, casnmaner & co).

--
Ciao
paoloard
http://www.riolab.org/

Bruno

unread,
Apr 17, 2016, 2:41:12 PM4/17/16
to
"paoloard" <xxp...@alice.it> ha scritto:
> ____
Grazie di cuore Paolo, per il tempo dedicato mi è la cortesia
dimostrata.
Spero anche io che qualcuno esperto possa aiutarmi o darmi una
dritta su come procedere.
Ciao, Bruno


--
Bruno.62

casanmaner

unread,
Apr 17, 2016, 3:34:07 PM4/17/16
to
Visto che Paolo mi ha chiamato in causa ho dato un'occhiata al file.
Io ti propongo una soluzione che è un po' uno stratagemma che si basa su come hai utilizzato i "nomi" nel foglio e come ho inteso che le date vengono inserite.
Una stessa data sarà presente al massimo due volte. Una volta in corrispondenza di una festività o riposo e successivamente in un giorno lavorativo dove il soggetto non lavora e recupera una precedente data festiva/riposo lavorata.
Non ho idea se possa funzionare nel caso il nomi che hai riportato hanno riferimenti non nello stesso foglio ma in fogli differenti (come immagino sia visto che dici che tu hai dodici fogli per mese) poiché non ho fatto la prova reale, anche se in teoria dovrebbe funzionare lo stesso.

E' una funzione definita dall'utente con i seguenti argomenti:
IntNome (dove inserirerai ad es. Nome1, Nome2, ecc. per ogni persona)
IntDateMesi (dove inserirai Date_mesi)
DataLimite (dove inserirai la data limite, anche con riferimento ad una cella che contiene la data)

Va inserita nella cella in cui vuoi venga visualizzato il numero di festività/riposi ancora non recuperati come una normale funzione Excel.
Ad es.
=CalcolaFrequenzaRiposi(Nome1;Date_mesi;$A$1)

'---
Function CalcolaFrequenzaRiposi(IntNome As Range, IntDateMesi As Range, DataLimite As Date)
Application.Volatile
Dim VerificaDateRiposi As Object
Dim Cont As Integer
Dim i As Integer, j As Integer
Dim IDM
Dim I_N
Set VerificaDateRiposi = CreateObject("Scripting.Dictionary")
i = 0
For Each IDM In IntDateMesi
If IDM.Value <= DataLimite Then
i = i + 1
Else
Exit For
End If
Next IDM
j = 0
For Each I_N In IntNome
j = j + 1
If j <= i Then
If I_N.Value <> "" Then
If VerificaDateRiposi.Exists(I_N.Value) Then
Cont = Cont - 1
Else
VerificaDateRiposi(I_N.Value) = 1
Cont = Cont + 1
End If
End If
Else
Exit For
End If
Next I_N
CalcolaFrequenzaRiposi = Cont
End Function

'---

paoloard

unread,
Apr 17, 2016, 7:33:44 PM4/17/16
to


"casanmaner" ha scritto nel messaggio
news:1ba8f8c6-e271-4471...@googlegroups.com...
Visto che Paolo mi ha chiamato in causa ...........


Wow! Detto e fatto! :-)
paoloard

Bruno.62

unread,
Apr 18, 2016, 2:08:50 AM4/18/16
to
[CUT]
Grazie ad entrambi;casnmaner e Paolo.
Per errore ho inviato una mail a casnmaner e non al gruppo.

Ho copiato il codice in un modulo, provando anche con
Public Function........

con la funzione definita dall'utente
=CalcolaFrequenzaRiposi(Musiu;Date_mesi;$AJ$3)

purtroppo mi restituisce sempre zero, indipendentemente dalla data
limite. Mi sfugge qualcosa?

Ciao

casanmaner

unread,
Apr 18, 2016, 2:31:20 AM4/18/16
to
Verifica che vi sia esatta corrispondenza degli intervalli, seppur discontinui e con riferimenti differenti, tra i Nomi (dei soggetti) e quello delle date.
Questo è il tuo file dove, nel mese di dicembre, ho inserito la funzione.
Il riferimento alla data è alla tua cella di "prova".
https://www.dropbox.com/s/ih3rc3wzsn36ycj/Copia%20di%20Prova%20conteggio%20riposi.xlsm?dl=0

Bruno.62

unread,
Apr 18, 2016, 2:34:54 AM4/18/16
to
[CUT]

Eccomi di nuovo.

Non ho capito il perchè, ma ora sembra restituire un valore, anche se
talvolta restituisce il valore con un unumero in meno, esempio: se, come
da foglio deve restituire 2, invece restituisce 1, quindi con valore 1
restituisce 0 ed altre volte anche se deve restituire 2 restituisce 0.
inoltre se inserisco una data limite nel formato 31/04/16 il conteggio
viene effettuato, mente se la inserisco nel formato 31/04/2016
restituisce #VALORE!

Bruno.62

unread,
Apr 18, 2016, 3:06:33 AM4/18/16
to
-------------

Trovato l'inghippo!

Ho seguito il tuo consiglio; ho verificato gli intervalli delle celle
selezionate nel definire il nome per le date. L'intervallo era corretto,
quindi nel dubbio, essendomi saltato all'occhio che febbraio ha 29 gg ed
io ho selezionato 31 celle delle quali le ultime due sono vuote,
riducendo la selezione di febbraio di due celle, tutto funziona alla
grande. Probabilmente non essendoci continuità nella definizione del
nome Date_Mesi excel ha qualche problema nel calcolo.
Le date dei mesi vengono calcolate automaticamente con formule che
lasciano la cella vuota in relazione al numero dei giorni del mese;
se non c'è una soluzione vorrà dire che proverò a lasciare tutte le
celle con la data o anno per anno definire il nome Date_Mese
selezionando solamente le celle dei mesi contenenti una data.
Che ne pensi?
Grazie

casanmaner

unread,
Apr 18, 2016, 3:10:59 AM4/18/16
to
Il giorno lunedì 18 aprile 2016 08:34:54 UTC+2, Bruno.62 ha scritto:

> viene effettuato, mente se la inserisco nel formato 31/04/2016

Da quando aprile ha 31 giorni????? :-D

Bruno.62

unread,
Apr 18, 2016, 3:26:22 AM4/18/16
to
---

Da oggi, caro! Nuovo calendario 2016. hi hi hi

Offrirei un caffè a tutto il news, oltre al doppio coffi per me.

Comunque confermo che le celle vuote non sono gradite da excel.

casanmaner

unread,
Apr 18, 2016, 3:31:10 AM4/18/16
to
Mah? ... Non saprei dirti senza poter provare sul file reale.
Come ti dicevo nella funzione ho utilizzato uno "stratagemma" perché i dati non sono facilmente "intercettabili" anche tramite VBA.
Se vedi nella funzione chiedo di inserire il nome dell'intervallo Date_mese ed eseguo un ciclo che, , legge cella per cella (es., in base a come hai disposto gli intervalli discontinui nel file che hai pubblicato, C4, D4, ... AG4, C22, ... ecc. ecc.) e ferma il conteggio quando trova che la data presente in quella cella corrisponde alla data limite.
Poi esegue lo stesso ciclo per le celle dell'intervallo del soggetto (es. Nome1) che deve però avere lo stesso ordine, anche se con riferimento righe differenti.
Ad es.
Se Date_Mese corrisponde all'intervallo, discontinuo,
=Riposi!$C$4:$AG$4;Riposi!$C$22:$AG$22;Riposi!$C$40:$AG$40
(dove la riga 4 è per dicembre e la riga 22 è per gennaio)
Nome1 dovrà corrispondere a
=Riposi!$C$6:$AG$6;Riposi!$C$24:$AG$24
(dove la riga 6 è per Nome1 di dicembre e 24 a gennaio)

E via così per il numero di mesi che vuoi vengano presi dalla formula.

casanmaner

unread,
Apr 18, 2016, 4:01:11 AM4/18/16
to
Qui vedi il file "ridotto" ai minimi termini (per facilità di lettura).
C'è esatta corrispondenza del numero di colonne e numero di righe (anche se per le righe ovviamente il riferimento è diverso) tra l'intervallo Date_mesi e Nome1.
Se provi ad inserire le date nei riposi/festività, in base alla data limite che ho inserito in alto per comodità, vedrai che il conteggio (sempre in alto) dovrebbe corrispondere. E questo anche in presenza di celle vuote nelle date.

Prova a verificare:
https://www.dropbox.com/s/msys7gx3q83a7x9/Copia2%20di%20Prova%20conteggio%20riposi.xlsm?dl=0

Bruno.62

unread,
Apr 18, 2016, 4:40:55 AM4/18/16
to
[CUT]

>
Provato!
Non so che dire, salvo
Mille, Mille grazie

Ciao

casanmaner

unread,
Apr 18, 2016, 5:43:50 AM4/18/16
to
Bene :-)
0 new messages