Estrarre dati da un foglio calc

Ho prodotto un foglio in calc in cui ho inserito dati di questo tipo: riga1 date progressive dal 1° gen al 31 dic, colonna1 cognome e nome, dalla colonna2 ferie, malattia ecc… inseriti sulla colonna corrispondente alla data in cui ne ha usufruito e sulla riga del cognome interessato.
Mi serve una formula che alla data di oggi mi dica, se l’interessato è assente, quando finirà il periodo di assenza.
Ovvero delle celle con data inizio assenza e data di fine assenza.
Chi mi può aiutare?

R.C. C’è forse un errore di sintassi?

  1. Formatta a data la cella A2 e mettici dentro la funzione: =CERCA.ORIZZ("";$B$1:$Q$3;3;0).

Dovrebbe essere:
=CERCA.ORIZZ("";$B$1:$NC$3;3;0).

Le tue stringhe funzionano ma ho un piccolo problema!
quando le riporto nel mio foglio, che per dirla tutta ha due righe in più rispetto all’esempio che ho riportato, il risultato mi prende due righe sopra rispetto al nome indicato nella cella apposita.
come posso risolvere?

Sì, ho copiato la funzione da un foglio dove non avevo messo il calendario completo, ma solo un breve periodo a cavallo della data odierna; e poi ho dimenticato di adeguare i riferimenti all’anno intero.

Premetto che, a mio avviso, il tuo problema si risolve a monte: i certificati di malattia riportano una prognosi “a tutto il”, e le richieste di ferie o permessi vari si fanno di solito “dal giorno x al giorno y”, quindi le date di fine assenza si possono già ricavare di lì.

Inoltre il foglio presenze che hai già strutturato ti fornisce già le indicazioni che desideri, e puoi -direi anzi che ti conviene- arricchirlo evidenziando i giorni non lavorativi (ad es., se si lavora dal lunedì al venerdì, quando Natale cade di lunedì il dipendente assente fino a venerdì 22 dicembre non sarà disponibile, in via ordinaria, fino a mercoledì 27).
Il problema, nell’utilizzo del foglio che hai già predisposto, sta probabilmente nel numero dei dipendenti, che rende scomoda la consultazione dell’intero foglio. Puoi risolverlo (oltre che con la semplice applicazione di un filtro) così:

  1. Inserisci due righe in testa al foglio (la seconda servirà solo da separatore), oppure crea un secondo foglio di lavoro (i passaggi successivi non cambiano, a parte ovviamente il fatto che le funzioni dovranno far riferimento all’area del primo foglio di lavoro);
  2. Nella cella A1 scriverai il nome del dipendente di cui vuoi sapere l’assenza/presenza;
  3. Nella cella B1 inserisci la funzione =CERCA.ORIZZ(B$3;$B$3:$NC$103;CONFRONTA($A$1;$A$3:$A$103;0);0) che trascinerai su tutte le altre celle della riga fino alla colonna NC.

La funzione CERCA.ORIZZ va a cercare nell’area B3:NC103 (i possibili 366 giorni dell’anno per gli ipotetici 100 dipendenti, se ne hai di più o di meno adegui il numero di righe) la data scritta in B3 (che diventa C3, D3, … trascinando la funzione nelle altre celle); quando la trova, scende di tante righe quante gliene indica la funzione CONFRONTA, e riporta il dato che trova nella cella di arrivo. A sua volta, CONFRONTA cerca nell’area A3:A103 (vale quanto già detto circa il numero di dipendenti, e quindi di righe) il nominativo che hai indicato in A1, e ne esprime numericamente la posizione.

In questo modo ti basterà cambiare il nome in A1 per estrarre dall’elenco un qualsiasi dipendente e vederne assenze e presenze durante tutto l’anno.

Se invece vuoi immediatamente sapere il primo giorno (a partire da oggi) in cui un certo dipendente è presente al lavoro:

  1. Modifica la funzione della cella B1 in questo modo: =SE(B3<OGGI();“x”;CERCA.ORIZZ(B$3;$B$3:$NC$103;CONFRONTA($A$1;$A$3:$A$103;0);0))
  2. Trascina lungo tutta la riga fino alla colonna NC
  3. Formatta a data la cella A2 e mettici dentro la funzione: =CERCA.ORIZZ("";$B$1:$Q$3;3;0).

Con il primo passaggio si immette in tutte le date antecedenti a quella odierna una x (o qualsiasi altro carattere ti piaccia): in mancanza di quest’accorgimento CERCA.ORIZZ ti darebbe sempre il primo giorno dell’anno in cui il dipendente è venuto a lavorare.

Con il secondo passaggio CERCA.ORIZZ, avendo come criterio di ricerca la cella vuota (""), ti recupera il primo giorno, da oggi in poi, in cui per il dipendente non è segnata una qualche assenza. E’ necessario, per il buon funzionamento, che i giorni non lavorativi siano contrassegnati come tali nell’elenco generale (ad es. con le lettere S, D, F, rispettivamente per sabato, domenica, festività).

Nella funzione CERCA.ORIZZ il penultimo elemento (quello che nella mia versione è indicato con 3) ordina di quante righe si deve scendere per andare a recuperare il dato desiderato, tenendo presente che al numero 1 corrisponde la riga stessa in cui è scritta la funzione. Se nel tuo file hai aggiunto due righe, la funzione CERCA.ORIZZ in A2 dovrà quindi avere come penultimo elemento 5 invece di 3.

Se la mia risposta ti ha aiutato, votala con :heavy_check_mark: (qui a sinistra)

Non so perché nella parte finale della risposta mi salti fuori uno <strong=""> che io non ho messo, e di lì in avanti scriva tutto in grassetto.

R.C. Intanto ti ringrazio per la risposta. Adesso non posso lavorarci perché sono fuori casa per un altro tipo di impegno.
Credo che tu mi abbia dato una ottima soluzione.
Ti farò sapere se avrò bisogno di ulteriori aiuti o accorgimenti. Grazie davvero tanto di nuovo

PS
Questo file lo devono utilizzare più uffici e c"è un capoufficio che vuole capire subito il personale in che posizione di trova e fino a quando. Credo che la tua proposta riesca a risolvere il mio problema. Ti farò sapere

C’è forse un errore di sintassi?
3. Formatta a data la cella A2 e mettici dentro la funzione: =CERCA.ORIZZ("";$B$1:$Q$3;3;0).

Dovrebbe essere:
=CERCA.ORIZZ("";$B$1:$NC$3;3;0).

come potrei fare per avere i risultati a fianco di ogni nome invece che scriverlo ogni volta?

In questo caso ti basta nascondere, nel quadro originale, le colonne corrispondenti alle date già passate: con l’ulteriore vantaggio di distinguere le motivazioni delle varie assenze (sulla malattia non c’è niente da fare, ma le ferie possono essere interrotte se ci sono imprescindibili esigenze di servizio).