Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

EXCEL straordinari

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: EXCEL straordinari

Postdi massimo311273 » 10/09/15 07:15

cercherò di spiegarmi quale secondo me è il criterio logico: (ho aggiunto 10 celle in basso per simulare il mese successivo fino alla cella 44) e (sto lavorando su gennaio 2016)

(riferito ad Excel) devi sommare il range V5:V14 se in U4 c'è 1, con il range V13:22 se in U12 c'è 1, con il range V21:30 se in U20 c'è 1, con il range V29:V38 se in U28 c'è 1, cosi sommerà tutti gli 1 che sono nei sette giorni che ben sai in realtà non corrispondono in 7 celle, ma allo stesso tempo se in un range ci sono due 1, il primo sarà del primo range e il secondo sarà del secondo range perché si può presentare che recupero il primo riposo dopo 3/4 giorni e il secondo riposo subito dopo il secondo permesso di conseguenza i due 1 sono nello stesso range perché l'ultimo giorno del primo range è anche il primo del secondo range. e chiaro che se nel rance successivo c'è 0 si somma a 0
lo stesso criterio lo deve adoperare per la seconda logica che in un certo senso ha un inizio ma non una fine

oppure se non vogliamo avere come riferimento gli 1 che sono in U, possiamo avere come riferimento i "Riposo/" che sono in B
devi sommare il range V5:V14 se in B4 c'è "Riposo/", con il range V13:22 se in B12 c'è "Riposo/", con il range V21:30 se in B20 c'è "Riposo/", con il range V29:V38 se in B28 c'è "Riposo/", cosi sommerà tutti gli 1 di U che sono nei sette giorni che ben sai in realtà non corrispondono in 7 celle, ma allo stesso tempo se in un range ci sono due 1, il primo sarà del primo range e il secondo sarà del secondo range perché si può presentare che recupero il primo riposo dopo 3/4 giorni e il secondo riposo subito dopo il secondo permesso di conseguenza i due 1 sono nello stesso range perché l'ultimo giorno del primo range è anche il primo del secondo range.
lo stesso criterio lo deve adoperare per la seconda logica che in un certo senso ha un inizio ma non una fine
è chiaro che questa diciamo formula deve lavorare su tutte le celle perché i riposi non sono fissi, quindi cella Es. B4 avrà il suo range, la 5 il suo, la 6 il suo la 7 il suo e così via.
Alla fine mi trovero in V35 in totale dei riposi recuperati ne i sette giorno e in V36 il totale dei riposi recuperati oltre i sette giorno
NB. ho mantenuto V35 e V36 per riferimento al messaggio precedente, ma con la giunta di 10 celle saranno V45 e V46.

Anthony sto cercando di rendere il mio concetto più chiaro possibile, e mi scuso per la confusione iniziale nella disposizione delle celle, pensavo fosse di più semplice soluzione e di riuscire poi a reindirizzare le celle nel foglio, scusa se continuo a scrivere ma ne vorrei venire a capo, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Sponsor
 

Re: EXCEL straordinari

Postdi Anthony47 » 11/09/15 00:32

Tutto l'ambaradan che ti ho proposto serve per creare un modello che si possa propagare automaticamente e senza errori da un mese all'altro (vedasi le formule per gli scambi dati tra un foglio e il successivo), oltre che per il calcolo dei ritardi nel recupero di Riposi lavorati (vedasi la Function myRecuperi e la relativa formula che usa questa funzione).
In questo modo sara' possibile avere per ogni Riposo lavorato l'indicazione
1=Recupero in tempo (cioe' recuperato entro il 10° giorno di calendario)
2=Recupero fuori tempo (cioe' recuperato oltre tale termine)
P=Recupero non ancora fatto; poiche' questo dato e' calcolato gia' considerando i primi 10 gg del mese successivo, P e' da assimilare a "Recupero fuori tempo"

Con Conta.Se conterai (non in V35, perche' la tabella si prolunga fino a riga 44; quindi diciamo in V45) quanti 1 ci sono, e calcolerai la maggiorazione al 30%; quanti 2 e qianti P ci sono (in V46), e calcolerai la maggiorazione al 40%.

La colonna aggiunta serve per tenere traccia del "Riporto dal mese precedente" che nelle tue valutazioni hai omesso; questa colonna deve essere adiacente alle colonne U e V, quindi W; se W e' occupata ti bastera' selezionare la colonna W, fare Inserisci /Colonna e tutto l'esistente viene spostato a destra (in genere senza dover rivedere le formule gia' presenti). Oppure sposti quanto oggi hai gia' messo in U e V nella prima colonna Libera e accanti ci metti la nuova colonna con la sua formula; poi modifichi i riferimenti ai dati nella formula myRecuperi.

Pensaci su...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 07:59

Ciao Anthony, sto ritestando la tua funzione Recupero riposo,
non mi è chiaro il punto 4, dove dici:
Anthony47 ha scritto:Poi copierai in colonna V e nella colonna della data, infine copi tutta la riga 35 fino alla riga 44, corrispondente a 10 giorni del mese "successivo". Queste formule potrebero restituire un errore se i fogli "mese precedente" e "mese successivo" non fossero presenti, errori che scompariranno quando i fogli vengono inseriti.


Quali formule dove e come copio

N.B Nella colonna data io ho già le date del mese successivo solo i primi 10 giorni, quindi nel foglio di settembre nella cella 35 ho 1/ottobre, pensavo che fosse logico, ma forse non ci devono essere le date nelle 10 righe!!!?


io sono arrivato a creare la colonna W e a fare quello che descrivi qui:

Anthony47 ha scritto:-sara' necessaria una ulteriore colonna adiacente a U-V, quindi W, per accoppiare un Recupero-riposo al "suo" Riposo-lavorato. Per questo metterai in W4 la formula Codice: Seleziona tutto=SOMMA(V$4:V4)-$U$2


Per la macro aspetterò che tu mi chiarisca prima questo passaggio
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 08:17

Ah! Anthony in riferimento a questo:



massimo311273 ha scritto:Di conseguenza calcolerò le maggiorazioni del 30% in V35, cioè deve sommare solo i giorni che ho recuperato nei famosi 7 giorni in modo da fare Es. =E35+magg.30%= €35,00e calcolerò le maggiorazioni del 40% in V36, cioè deve sommare solo i giorni che ho recuperato oltre famosi 7 giorni in modo da fare Es. =E36+magg.40%= €40,00in U35 ho la somma della colonna U in V35 quella di V, in U36 ho la sottrazione tra U35 e V35 in caso che Es. lavoro due riposi ma ne recupero solo uno in quanto i giorni li dovrò sempre recuperare non c'è un termine un mese un anno si sommano sempre.Questa non l'ho capita, perche' dagli "1" in col U e V non si capisce se la maggiorazione deve essere al 30% o al 40%. Insomma il calcolo lo dovrai fare su un'altra colonna dove metteremo l'esito della verifica della distanza tra Lavorato e Recuperato.

Anthony ha scritto:Questa non l'ho capita, perche' dagli "1" in col U e V non si capisce se la maggiorazione deve essere al 30% o al 40%. Insomma il calcolo lo dovrai fare su un'altra colonna dove metteremo l'esito della verifica della distanza tra Lavorato e Recuperato.


Le maggiorazioni sono due da calcolare, recupero entro i 7 gg 30%, recupero oltre i 7 gg 40%

Comunque ieri quando ho fatto la prova ero a lavoro e avevo trovato lo stesso inghippo che ho trovato oggi, quindi ho pensato che dipendesse solo da me, ma aspetterò di finire tutta la funzione per trarre una conclusione più precisa , perché come avevo pensato forse il calcolo è fatto solo su una maggiorazione.

Attendo la tua risposta, completerò la funzione e ci risentiamo, ciao.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 11/09/15 09:15

La formula da copiare nella colonna V e in quella della data (A) e' quella che ti faccio mettere in U35. Per copiare fai Contr-c in U35, poi selezioni V35 e fai Contr-v, selezioni A35 e fai Enter. Poi copi A35:V35 in A36:A44.
L'uso di questa formula nella colonna Data serve a portare con certeza nel foglio quello che risulta dal foglio "successivo" (o "precedente", come fatto con la formula in U2), e a creare una struttura di foglio che puo' essere duplicata e nominata coi nomi del mese dove i dati si propagano da un mese all'altro.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 18:47

Anthony, vediamo se ho capito:
Copio in V35 e A35 questa formula
=INDIRETTO(INDIRIZZO(RIF.RIGA(U4);RIF.COLONNA(U4);4;1;TESTO(FINE.MESE($C13;0)+1;"mmmm")))
Poi devo copiare la riga che va da A35 a V35? E come faccio ad incollarla nella colonna che va da A36 a A44?
Una è orizzontale e l'altra è verticale, forse c'è qualcosa che mi sfugge
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 11/09/15 19:01

No: metti quella formula in U35; poi copi U35 e incolli separatamente in V35 e A35.

Per la seconda domanda: copia A35:V35; seleziona A36:A44, premi Enter e guarda che succede.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 19:06

Ok capito, mi esce in A35 riposi da recuperare e sotto sempre in A tutti 0 giusto?
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 21:55

Anthony47 ha scritto:[-sara' necessaria una ulteriore colonna adiacente a U-V, quindi W, per accoppiare un Recupero-riposo al "suo" Riposo-lavorato. Per questo metterai in W4 la formula
Codice: Seleziona tutto
=SOMMA(V$4:V4)-$U$2
che copierai fino a fine tabella, cioe' fino a fine tabella, cioe' fino a W44


Non ho capito una cosa quando copio la formula fino W44, la devo copiare tipo =SOMMA(V$5:V5)-$U$2 e così via? Quindi i due valori sempre uguali? Che leggono la cella di fianco?
Perché se trascino la cella fino in basso mi cambia solo il valore V4, il valore V$4 resta invariato dandomi errore.

Anthony47 ha scritto:[-Torna sul foglio Excel in costruzione, seleziona la prima cella in cui vuoi fare il calcolo del ritardo nel recupero, ad esempio X4, e inserisci la formula
Codice: Seleziona tutto
=myRecuperi(U4:W44;C4:C44)

Cosa ci sia in U4:W44 oramai l'abbiamo detto; in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).
Infine:
-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter.

In oltre quando ritorno sul foglio di calcolo dopo aver messo la macro 1 al suo posto e vado a copiare la formula/macro myRecupri in X4 la cella rimane bianca non dandomi nessun valore, in U4 e V4 ci sono gli 1 che sono quelli che rilevo io con le formule CONTE.SE, Es. In U4 mi rilevava se in B4 vi era "*Riposo/*", quindi la formula era =CONTA.SE(B4;"*Riposo/*") e =CONTA.SE(B4;"Recupero Riposo/") rispettivamente, trascinata fino in fondo dava CONTA.SE(B5, (B6, (B7 e così via,
portando avanti la tua funzione tutte le celle non sono più modificabili e in oltre tutte presentano questa formula {=CONTA.SE(B4;"*Riposo/*")} come vedi si sono aggiunte la graffe oltre a non variare più la B con i numeri crescenti variabili sono tutte la celle B4
quello che contenevano ho cercato di spegarlo in più messaggi, probabilmente esprimendomi male, uno degli ultimi è questo
(Re: EXCEL straordinari
Postdi massimo311273 » 08/09/2015, 9:53)
per quello che invece c'è o dovrebbe esserci in W4:W44 non lo so e una colonna che ho creato seguendo le tue istruzioni, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 11/09/15 22:18

Ah! Dimenticavo quando provo a modificare una delle celle interessate nella tua funzione, mi si apre una finestra che dice: Impossibile modificare parte della matrice, quindi non posso cambiare i dati nelle celle, il problema che ti ho spiegato prima in U avendo dato a tutte le celle la stessa e identica formula chiaramente mi ha azzerato tutte le celle quindi in U non ho neanche un 1 di conseguenza la tua funzione non mi rileva un input per poter lavorare, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 12/09/15 00:40

Premetto che ho fatto confusione...
Le formule che ti ho fatto mettere in A35, U35 e V35 le avevo scritte quando non sapevo quale era il tuo tracciato record e avevo supposto che le date fossero in colonna C (vedi messaggio del 7-9 "mattina presto").
Questo riferimento a colonna C non l'ho aggiornato dopo che hai indicato che le date sono in colonna A, quindi ti ho fatto inserire delle formule errate.
Le fomula da mettere in A35 e'
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))

Poi copia A35 in U35:V35, e poi copia A35:V35 in A36:V44.
A questo punto, se stai lavorando con le date di Settembre e hai inserito anche i fogli Agosto e Ottobre vuoti, le nuove righe avranno la data che parte dal "0-gen-1900" e le altre due colonne con "0".

Recuperato questo MIO PRIMO errore veniamo ai punti presentati nei tuoi ultimi messaggi.
La formula scritta in W4 e'
Codice: Seleziona tutto
=SOMMA(V$4:V4)-$U$2

Poi copia W4 e incollala su W5:W44; V$4 e $U$2 rimarranno fissi, V4 diventa V5, V6, V7, etc e non dovrebbe darti errore. Se ti da errore dimmi su quale cella e quale errore; inoltre fammi un screenshot dell' area U1:Wnn, dove per "nn" intendo 2-3 righe dopo la cella con errore.

Perche' nella colonna B sono presenti ora delle formule a matrice (quelle racchiuse tra parentesi graffe)? Perche' ti ho detto di mettere la formula =myRecuperi(U4:W44;C4:C44) in X4 ma poi ti ho fatto estendere erroneamente B4
Erroneamente Anthony ha scritto:Infine:
-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter

L'istruzione giusta doveva essere (dopo aver messo la formula in X4, quella corretta che ti dico tra poco):
Infine:
-seleziona X4:X44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter

Anche la formula myRecuperi considera le date come se fossero in colonna C, e l'avevo detto:
in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).

Quindi la formula da inserire in X4 prima di "spalmarla" sull'area X4:X44 sara'
Codice: Seleziona tutto
=myRecuperi(U4:W44;A4:A44


Per cambiare le formule in B4:B44 devi cancellare tutto il blocco (che per effetto di quella infelice istruzione ora contiene una unica formula) e ripristinare le formule originali che tu conosci bene.

Dopo queste correzioni in colonna X dovrebbero esserci, accanto agli "1" di colonna U, le voci 1 (se recupero nei termini), oppure 2 (se recupero oltre i termini) oppure "P" (che significa Pendente, cioe' non recuperato nemmeno entro i primi 10 gg del mese successivo, e quindi assimilabile a "oltre i termini").

Usa Conta.Se per contare questi valori e calcolare le maggiorazioni al 30% o 40%. Ma attenzione, perche' in colonna X sia "1" che "2" che "P" sono stringhe, quindi anche nel Conta.Se devi usare stringhe, es =Conta.Se(X4:X44;"1")

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 12/09/15 04:11

Ciao, gli errori che tu mi descrivi tipo la colonna data li ho corretti già io altrimenti non sarei potuto andare avanti e le righe sono fino a 43 non 44 settembre a da 30 gg, poi la colonna dove i dati sono fissi e con matrice non è B ma U ed è li che eviterò insieme alla colonna V di mettere in anticipo le mie formule, ora dovrò ripetere tutti i passaggi perché il foglio è praticamente bloccato per fortuna che non lavoro mai sul foglio originale sempre su una copia altrimenti adesso mi sarei suicidato :) apparte gli scherzi appena rifarò i passaggi ti farò sapere ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 13/09/15 07:27

Allora partiamo dal presupposto che le colonne interessate sono:
A che contiene la DATA, B contiene solo il testo Riposo, Riposo/, e Riposo Recuperato,
U che contirne i Riposi da recuperare quindi il primo 1, V che contiene i Riposi recuparati il secondo 1,
W e X che sono quelle che mi dici di creare man mano che vado avanti con la creazione della funzione
essendo Settembre un mese da 30 gg le righe interessate sono dalla 4 alla 33 che sono i giorni del calendario
e da 34 a 43 che sono quelle che creo per effettuare il calcolo dei mesi precedente e successivo.
(Metterò il numero cella in parententesi chiusa per capirci dove è esattamente sto lavorando)
(Metterò le formule che ritengo valide in formato code)

1° passaggio è quello di inserire al fine di sapere quanti Riposi-lavorati non sono stati ancora recuperati a inizio mese in U2 la formula che segue:

U2)
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(V2);RIF.COLONNA(V2);4;1;TESTO(FINE.MESE($A13;-1);"mmmm")))


2° passaggio inserire al fine di calcolare il "riporto in uscita" in V2 la formula che segue:

V2)
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(--(MESE(A4:A43)=MESE(A13));U4:U43)-MATR.SOMMA.PRODOTTO(--(MESE(A4:A43)=MESE(A13));V4:V43)+U2


3° passaggio inserire in U34 la seguente formula, (evidenzio che nel frattempo la colonna U4 U33 è stata ripulita dalla formula
Codice: Seleziona tutto
=CONTA.SE(B4;"*Riposo/*")
quindi le celle sono pulite

U34)
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(U4);RIF.COLONNA(U4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))

4° passaggio copiare in V34 la stessa formula di U34 (qui ho una domanda nella copia della formula precedente che modalità adopero?)
1 seleziono semplicemente la "cella U34 + ctrl + c" e poi seleziono la "cella V34 + ctrl + v"
2 oppure evidenzio la formula U34 nella barra della formula "ctrl +c" e poi "ctrl +v" in V34
ti faccio questa domanda perchè le due modalità copiano in modo diverso la prima la formula si adatta alla nuova cella Es.

V34)
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(V4);RIF.COLONNA(V4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))

mentre la seconda la formula è identica, io ho provato in ambi i modi e il risultato apparentemente non cambia cioè è sempre 0

V34) =INDIRETTO(INDIRIZZO(RIF.RIGA(U4);RIF.COLONNA(U4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))

5° passaggio copiare in A34 la stessa formula di U34 (qui ti faccio la stessa domanda di sopra)
1 seleziono semplicemente la "cella U34 + ctrl + c" e poi seleziono la "cella A34 + ctrl + v"
2 oppure evidenzio la formula U34 nella barra della formula "ctrl +c" e poi "ctrl +v" in A34
ti faccio questa domanda perchè le due modalità copiano in modo diverso la prima la formula si adatta alla nuova cella Es.

A34)
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
e qui mi da questo errore "42644" la formattazione è su generale,
anche se credo sia questo il modo corretto perche nel messaggio ultimo mi hai detto di copiare questa in U34 e V34

mentre la seconda la formula è identica, e il risultato apparentemente non cambia cioè è sempre 0

6° creo un'altra colonna in W per accoppiare un Recupero-riposo al "suo" Riposo-lavorato e metto in W4 la formula che copierai fino a fine tabella, cioe' fino a W34

W4)
Codice: Seleziona tutto
 =SOMMA(V$4:V4)-$U$2
(ottenendo la variazione solo di V4 che diventa 5 poi 6 ecc.) qui non mi da nessun errore

7° passaggio è creare la macro questo codice:

Codice: Seleziona tutto
Function myRecuperi(ByRef myWorkRec As Range, ByRef myData As Range, Optional ByVal myDb As Boolean = False) As Variant
Dim WArr1, WArrD, myOut() As String, I As Long, J As Long, UBW1 As Long, LBW1 As Long
Dim myCDate As Date, Paired As Boolean, WCnt As Long, myD As Double

ReDim myOut(1 To myWorkRec.Rows.Count)
If myWorkRec.Rows.Count <> myData.Rows.Count Then
    myOut = CVErr(xlErrValue): myRecuperi = myOut
    Exit Function
End If
WArr = myWorkRec.Value
WArrD = myData.Value
UBW1 = UBound(WArr, 1)
LBW1 = LBound(WArr, 1)
ReDim myOut(LBW1 To UBW1)

For I = LBound(WArr, 1) To UBW1
    If WArr(I, LBW1) = 1 And Month(WArrD(I, 1)) = Month(WArrD(1, 1)) Then
        Paired = False: WCnt = WCnt + 1
        myCDate = WArrD(I, 1)
        For J = I + 1 To UBW1
            If myDb Then myD = J / 1000
            If WArr(J, LBW1 + 1) = 1 And WArr(J, LBW1 + 2) = WCnt Then
                Paired = True
                If WArrD(J, 1) < myCDate + 10 Then
                    myOut(I) = 1 + myD
                Else
                    myOut(I) = 2 + myD
                End If
            Else
                'nulla
            End If
            If Paired Then Exit For
        Next J
        If Not Paired Then myOut(I) = "P"
    End If
Next I

myRecuperi = Application.WorksheetFunction.Transpose(myOut)

End Function

8° passaggio qui mi perdo


creo la colonna X per fare il calcolo del ritardo nel recupero, e inserisco in X4 questa Macro/formula

X4) =myRecuperi(U4:W44;C4:C44)

ma se ho capito bene dall'ultimo messaggio non è ancora il momento di farlo tu scrivi

-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter


Ma in U4 io non ho niente, ricordi! ho eliminato la formula CONTA.SE ed è rimasta vuota nel frattempo e non ottengo alcun risultato

L'istruzione giusta doveva essere (dopo aver messo la formula in X4, quella corretta che ti dico tra poco):
Infine:
-seleziona X4:X44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter

Anche la formula myRecuperi considera le date come se fossero in colonna C, e l'avevo detto:
in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).

Quindi la formula da inserire in X4 prima di "spalmarla" sull'area X4:X44 sara'
Codice: Seleziona tutto
=myRecuperi(U4:W44;A4:A44


Per cambiare le formule in B4:B44 devi cancellare tutto il blocco (che per effetto di quella infelice istruzione ora contiene una unica formula) e ripristinare le formule originali che tu conosci bene.

Dopo queste correzioni in colonna X dovrebbero esserci, accanto agli "1" di colonna U, le voci 1 (se recupero nei termini), oppure 2 (se recupero oltre i termini) oppure "P" (che significa Pendente, cioe' non recuperato nemmeno entro i primi 10 gg del mese successivo, e quindi assimilabile a "oltre i termini").

Usa Conta.Se per contare questi valori e calcolare le maggiorazioni al 30% o 40%. Ma attenzione, perche' in colonna X sia "1" che "2" che "P" sono stringhe, quindi anche nel Conta.Se devi usare stringhe, es =Conta.Se(X4:X44;"1")

Ciao


Adesso ti chiedo sperando che i miei passaggi siano tutti corretti, potresti rispiegarmi il passaggio 8° seguendo la mia impostazione di messaggio? se ho sbagliato qual cosa mi scriverai:
Es.
5° e descrivi solo cosa realmente devo fare senza spiegarmi l'errore perché 1 e più facile seguire la sequenza dei procedimenti 2 perché di conseguenza dov'è lo sbaglio è facilmente deducibile.

Credo che ormai ce l'abbiamo quasi fatta, e questa sia la volta decisiva, ti saluto, alla prossima, con un grosso grazie per il lavoro a questo punto non facile che stai facendo per me e per tutti, ciao

NB. Dopo aver inserito la macro io metto in X4 la formula =myRecuperi(U4:W44;A4:A44) nella cella mi da ####### ache se faccio f2 ctrl + maius + Enter
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 13/09/15 23:22

Tagliamo la testa al toro, eccoti il file che contiene le mie "personalizzazioni":
https://www.dropbox.com/s/c87sfrroopzdh ... .xlsm?dl=0

Il file contiene un foglio MODELLO, che secondo me ti dovrebbe consentire di creare tutti i futuri fogli mensili.
In questo "modello" ho inserito:
-le formule in U2 e V2 per gestire i "riporti" dal mese precedente e al mese successivo; rispettivamente
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(V2);RIF.COLONNA(V2);4;1;TESTO(FINE.MESE($A13;-1);"mmmm")))
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(--(MESE(A4:A45)=MESE(A13));U4:U45)-MATR.SOMMA.PRODOTTO(--(MESE(A4:A45)=MESE(A13));V4:V45)+U2

-la formula nella colonna W, da W4 a W44:
Codice: Seleziona tutto
=SOMMA(V$4:V4)-$U$2

-nell'intervallo X4:X44 la formula
Codice: Seleziona tutto
=myRecuperi(U4:W44;A4:A44)
(confermata con Contr-Maiusc-Enter)
-in A35 fino ad A44 la formula per riprendere i primi 10 gg del mese "successivo":
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))

-formule analoghe in colonna U e colonna V

In aggiunta a queste cose, che sono state discusse nei messaggi degli ultimi giorni, ho inserito da A4 fino ad A34 le formule che dovrebbero creare automaticamente le date, una volta impostato il nome foglio; in particolare
-in A4
Codice: Seleziona tutto
=DATA.VALORE("1 "&STRINGA.ESTRAI(CELLA("nomefile";A1);TROVA("]";CELLA("nomefile";A1))+1;22)&" " &A2)

-in A5 fino ad A31
Codice: Seleziona tutto
=A4+1

-in A32:A34
Codice: Seleziona tutto
=SE(E(MESE(A31+1)=MESE(A8);A31<>FALSO);A31+1)


Il file contiene il codice della Function myRecuperi.

Il fatto che Settembre abbia 30 gg lo dobbiamo ignorare, se vogliamo creare un "modello" che poi creera' tutti i mesi dell'anno, compreso quelli di 30, 31, 28 o 29 giorni.
Con le formule usate i giorni inesistenti (es 31 settembre) non avranno una data, e quindi non saranno compilati dall'utente.

Inoltre, con lo scopo di facilitare la lettura del foglio, ho formattato di grigio le righe che appartengono ai sabati e alle domeniche (l'ho fatto fino a colonna AZ).

Partendo da questo foglio ho creato un foglio che ho nominato Settembre e un'altro che ho nominato Ottobre; ho anche inserito un foglio vuoto chiamato Agosto, che mi e' servito per impostare (in V2) un riporto verso il mese successivo.
Nel mese di Settembre ho inserito "A MANO" degli "1" in colonna U e V simulando quindi dei riposi lavorati e dei recuperi, per vedere l' effetto sui risultati di colonna X.
Ad esempio:
Immagine
free image hosting
(le celle circolettate sono i "riporti")
Nell'esempio ho 1 recupero in tempo ("1"), 2 fuori tempo ("2") e 1 Pendente (cioe' non ancora recuperato entro i primi 10 gg del mese successivo; nella sostanza e' gia' fuori tempo)

Prova anche tu con degli 1 messi manualmente, per colaudare il meccanismo di calcolo di colonna X.

Se il risultato ti sembrera' ragionevole, allora ti suggerirei di riportare nel foglio MODELLO le tue formule e poi partire con la creazione dei fogli mensili e loro compilazione.
Oppure porti sul tuo foglio candidato a diventare il "Modello" le formule e gli accorgimenti copiandoli dal mio file.

Come detto nei messaggi precedenti, i fogli devono chiamarsi come i mesi dell'anno, quindi Agosto, Settembre, Ottobre,...
Per creare una copia del Modello:
-attiva il foglio MODELLO
-tasto dx su tab col nome del foglio
-scegli Sposta o Copia; spunta subito "Crea una copia"; scegli la posizione in cui il nuovo foglio sara' sistemato; premi Ok
-doppioclick sul nome del foglio appena creato, cambia il nome col Mese appropriato.

Per lavorare sul foglio di un mese, deve esistere un foglio col nome del mese precedente e uno del mese successivo.

Quando finisci di compilare un mese e' necessario "congelare" il contenuto di U2, cioe' del "riporto dal mese precedente": selezioni U2, premi F2, premi F9, Enter. Questa operazione in realta' si puo' fare appena sei certo che il riporto in entrata non potra' piu' cambiare.

Arrivato a Dicembre, potrai inserire un foglio Gennaio; non l'ho detto, ma la data in A4 corrispondera' al 1° del nome foglio dell'anno scritto in A2. Quindi quando arrivi a creare Gennaio (che sara' 2016) ricordati di modificare A2 nel Modello prima della copia, oppure modifica in A2 del foglio appena creato.

Il file puo' continuare con i fogli del "mese successivo" all'infinito; l' importante e' che non ci siano due fogli con lo stesso nome; quindi quando dovrai creare il foglio Agosto (del 2016) dovrai prima cancellare il foglio Agosto preesistente.

Spero ti sia di qualche utilita'

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 15/09/15 02:17

Grazie mille Anthony, e un bellissimo lavoro, adesso cercherò di implementare il tuo ed il mio, ci sentiremo più avanti per qualche altra dritta, grazie grazie grazie
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 17/09/15 20:17

Ciao Anthony il lavoro procede benissimo sono riuscito ad implementare i due fogli e quindi tutto funziona alla grande,
ora avrei un altro quesito: io devo calcolare le ore che invece non lavoro
Es. oggi inizio alle 07:00 "D4" 14:00 "E4" 15:00 "F4" 17:00 "G4", il giorno dopo inizio di nuovo alle 07:00 "D5" le ore che non lavoro sono 15:00 ottenute con la formattazione ore e questa formula =(24-E4)+(F4-0)+(24-G4)+(D5) e fin qui ci siamo.
*La regola del contratto è questa: fra un turno di lavoro e l'altro devono passare almeno 11 ore di smonto però per ragioni di servizio posso iniziare il turno successivo anche dopo appena 9 ore ma con una regola non più di 3 volte al mese e non più di 12 in un anno, per intenderci se inizio dopo solo 9 ore di smonto, a Gen 3 volte, a Feb 3 volte, a Mar 3 volte e 3 ad Apr per un totale di 12 volte, per il resto dell'anno non posso farlo più.
Quindi capisci che questa formula non serve praticamente a niente, in più ho bisogno che quando sono di riposo e permesso attualmente il risultato è questo:
Es. oggi inizio alle 07:00 "D4" 14:00 "E4" 15:00 "F4" 17:00 "G4", poi riposo e poi permesso e poi riprendo il gg seguente alle 07:00 il risultato è questo dalle 17:00 alle 00:00 segna 8 ore, il permesso segna 0 ore e il riposo segna 7 ore, il giorno dopo che riprendo il lavoro segna 8 ore, come puoi dedurre il risultato finale è tot ore non lavorate 23, invece io vorrei che fosse 8 ore dalle 17:00 alla 00:00, 24 ore dalle 00:00 alle 24:00 del permesso, 24 ore dalle 00:00 alle 24:00 del riposo e se inizio di nuovo alla 07:00, 7 ore per un totale corretto di 63 ore
in più il conteggio lo restituisce in ore cioè 00:00 io vorrei che lo desse in numeri cosi è più facile calcolare a colpo d'occhio,
e per ultimo e non da meno creare la regola di conteggio per sapere quante volte lavoro meno di 11 ore nel mese e nell'anno come descritto sopra, in più se la differenze e addirittura inferiore a 9 ore quindi vorrebbero provare a farmi lavorare dopo 8 ore di smonto la cella diventa rossa in segno di attenzione, "e anche se supero il numero di 3 volte al mese o 12 annue", se la cosa così si complica evitiamo la parte tra virgolette

le cella interessate sono D,E,F,D, per gli orari di entrata e uscita V dove rilevo le differenze con la formula =(24-E4)+(F4-0)+(24-G4)+(D5), rammenta che in W inizia il lavoro che abbiamo appena fatto del recupero riposo se vuoi e hai bisogno di più celle come presumo possiamo spostare V in AC

è un bel grattacapo il mio contratto e mi sento quasi a disaggio :oops: a fare tutte queste richieste, non so più come ringraziarti per tutta la tua pazienza, ciao e spero che almeno ora sia stato comprensibile :(
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 18/09/15 00:25

Es. oggi inizio alle 07:00 "D4" 14:00 "E4" 15:00 "F4" 17:00 "G4", il giorno dopo inizio di nuovo alle 07:00 "D5" le ore che non lavoro sono 15:00 ottenute con la formattazione ore e questa formula =(24-E4)+(F4-0)+(24-G4)+(D5) e fin qui ci siamo
Se mi permetti, questa formula restituisce un valore a caso, e lo conferma il fatto che dalle 17:00 alle 7:00 del gg dopo passano 14 ore, non 15 (ma la formula restituisce ben piu' delle 15 ore di cui parli)

Per quello che ho capito, dovresti invece usare questa formula a cominciare da V4 (o altra colonna libera):
Codice: Seleziona tutto
=SE(G4<>0;(MIN(SE(D5:D7<>0;RIF.RIGA(D5:D7);""))+RIF.RIGA(D8)*(CONTA.SE(D5:D7;">0")=0)-1+1-G4-RIF.RIGA(A4)+INDICE(D$1:D7;MAX(SE(D5:D7<>0;RIF.RIGA(D5:D7);""))))*24;"")
Da confermare con Contr-Maiusc-Enter, non il solo Enter.

Poi copi V4 e incolli nelle celle sottostanti fino al 31 del mese.

La formula conta quante ore sono passate tra una timbratura in colonna G e "la successiva" in colonna D.
Anche in questo caso si pone il problema di riportare nel mese corrente le timbrature del mese successivo, almeno per i primi 5 giorni; per questo copierai la formula che ti avevo fatto mettere in A35 e la incollerai in D35:G39.
In realta' la formula si ferma ad analizzare i 5 gg successivi a una timbratura di uscita; quindi valori superiori a 120 ore di intervallo potrebbero essere sbagliati, ma mi pare che si tratti di calcolare se e' rispettata la soglia di almeno 11 ore, quindi non vedo problemi.
A questo punto dovrai usare Conta.Se su questi risultati per calcolare quanti intervalli nel mese sono inferiori alle soglie che ti interessano.
Se vuoi estendere il calcola all'anno, dovrai inventare anche su questa colonna un meccanismo di "riporto al mese successivo" e "riporto dal mese precedente", per cui userai formule simili a quelle usate per i riport di "Riposo lavorato".
Per capire se ti fanno lavorare con riposo inferiore alle 8 ore rispetto al fine turno precedente, devi guardarti allo specchio: se hai le occhiaie allora siamo in carenza di riposo...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 18/09/15 12:15

Hahahahaha!!!!! Hai ragione non ci avevo pensato avevo la risposta , come dire .... sott'occhio o fronte occhio.

Anthony io ho fatto come dici copiato la formula che mi hai appena dato in V4 digitando shift + ctrl + enter e trasportata fino a fine mese, poi ho copiato la vecchia formula che avevamo adoperato in A 35 per prolungare il conteggio di 5 gg al mese successivo .
Credo di aver fatto tutto!?
ma come risultato ho nei giorni che lavoro ipotesi 7:00 15:00 16:00 17:00 risultato 00:00 e nei giorni che non lavoro la cella e del tutto vuota,
se invece sposto l'orario in G tipo alle 22:15 il risultato è 18:00 ore, 22:30 è 16:00 ore, 22:45 è 6:00 ore dalle 18:00 aumentando ogni volta di un'ore fino alle 22:00 il risultato è 00:00, forse c'è qualcosa che non va?!?!?!
Poi ho notato che hai calcolato solo la cella D, G, ed E e F? io adopero 4 celle perché posso fare un turno spezzato ma altrimenti uso solo D è E per un turno Es. 07:00 15:00 oppure 15:00 23:00 e conseguente notturno 23:00 07:00 oppure lo stesso con F e G di solito per i notturni.
Prova a rileggere il mio messaggio precedente perché potrebbe essere come al mio solito faccio tante chiacchiere sperando di facilitare la comprensione e invece complico, e dimmi se ti è tutto chiaro, ok? ciao grazie
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 18/09/15 14:53

Ho dimenticato di dire che le celle contenenti la nuova formula vanno formattate "Numero con due decimali" perche' le ore non sono restituite in formato orario ma numerico, come avevi chiesto (quindi 7,25 significa 7h15min)

Inoltre nella mia formula e' rimasto un MAX che invece devi correggere in MIN.

Non ho capito cosa c'entrano le due timbrature intermedie: non dobbiamo calcolare il riposo "fra un turno di lavoro e l'altro"? E questo non si calcola guardando l'ora di fine turno (colonna G, vero?) con l'ora di inizio del turno del "giorno lavorato successivo" (colonna D, vero?)?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 18/09/15 16:57

Ok! adesso funziona, ti spiego cosa c'entrano le due timbrature intermedie che tali non sono, io non faccio quasi mai il turno spezzato quindi io calcolo le ore come ti dicevo prima: "io adopero 4 celle perché posso non fare un turno spezzato e uso solo le celle D è E per un turno Es. 07:00 D 15:00 E oppure 15:00 D 23:00 E e conseguente notturno 23:00 D 07:00 E oppure lo stesso con F e G di solito per i notturni quindi 23:00 F 07:00 G
se io calcolassi solo D e G il totale ore che si trova in H mi segna che ho lavorato 35 ore direi un po' impossibile la formula che regola il calcolo delle ore in H è la seguente: =E6-D6+(D6>E6)+G6-F6+(F6>G6) in pratica in fine turno può essere sia in E che in G, ok?
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "EXCEL straordinari":


Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti