Calcolo con funzioni di date all'interno di database

zilio82

Nuovo utente
27 Gennaio 2017
7
1
Milano
Excel 2010
0
Ciao a tutti,
mi ritrovo in questo problema per il quale chiedo aiuto.

Prima di tutto spiego com'è costituito l'allegato.

L'allegato di esempio è costituito da due matrici di dati:
1) La prima è in Foglio1, nell'area A1:C7 (la chiameremo MATRICE PRINCIPALE): si tratta di una matrice nella quale vengono indicati, a cadenza rigorosamente settimanale, i prodotti (DVD; CD; Digital) che ogni agente (Tizio, Caio, Sempronio, Giulio, Cesare, Augusto) può mettere in vendita. Ogni agente può mettere in vendita esclusivamente un solo prodotto per settimana. Nella riga 1 sono riportate le date per le quali, per ciascuna di esse, ho necessità di sapere quale prodotto viene gestito da quale agente di vendita nella settimana precedente alla data della corrispondente cella (mi spiego meglio: la cella C1 dovrà indicare la situazione del periodo dal 6 giugno 2017 al 12 giugno 2017); nella colonna A sono indicati gli agenti; dalla colonna B in poi sono indicati i prodotti di competenza di ciascun agente nella settimana di riferimento.
2) La seconda matrice è in Foglio2, nell'area A1:D6 (la chiameremo MATRICE DI RIEMPIMENTO). La riga 1 riporta le etichette di colonna; la colonna A riporta la data in cui avviene un passaggio di assegnazione di prodotto per un determinato agente di vendita (attenzione: un agente può ricevere cambiamenti di prodotto anche più volte nella stessa settimana); la colonna B indica l'agente di vendita per il quale stiamo inserendo le informazioni; la colonna C riporta il prodotto per il quale viene sospesa la vendita; la colonna D indica il prodotto per il quale viene assegnata la vendita.

Il lavoro che devo fare è che, ogni giorno, devo registrare nella matrice di Foglio2!A1:D6 i vari cambiamenti (nell'esempio ho simulato alcune ipotesi).

La mia necessità è che tali cambiamenti vengano riportati tempestivamente nella matrice di Foglio1A1:C7, con le seguenti regole: se nella matrice di Foglio2 inserisco una modifica relativa a Caio alla data odierna (consideriamo proprio il 6 giugno), il risultato di tale modifica dovrà essere riportato in corrispondenza di Caio, nella matrice di Foglio1, nella colonna che ha come data di riferimento il 12 giugno. Se domani (consideriamo proprio il 7 giugno) inserisco in Foglio2 una nuova modifica relativa a Caio, in Foglio1, in corrispondenza del 12 giugno dovrò visualizzare esclusivamente il prodotto assegnato a Caio il 7 giugno. Naturalmente, quando sarà passato il 12 giugno, la colonna relativa al 12 giugno in Foglio1 resterà aggiornata al 12 giugno e non subirà successive modificazioni.

Nel file allegato, in Foglio3 ho cercato di simulare il problema con qualche spiegazione sul foglio di lavoro, nella speranza di aver chiarito il problema e che mi possiate aiutare.

Vi ringrazio per l'aiuto e i suggerimenti che mi potrete fornire.
 

Allegati

paolodig

Utente abituale
Expert
10 Novembre 2016
330
18
Roma
Excel 2007
0
In Foglio1, cella C2, inserire questa matriciale e copiarla a piacere in lungo e in largo:

=SE.ERRORE(INDICE(Foglio2!$B$2:$D$100;PICCOLO(SE(Foglio2!$B$2:$B$100=$A2;SE(Foglio2!$A$2:$A$100>B$1;SE(Foglio2!$A$2:$A$100<=C$1;RIF.RIGA(Foglio2!$B$2:$B$100))));CONTA.PIÙ.SE(Foglio2!$B$2:$B$100;$A2;Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1))-(1);3);"")

[Attivarla con CTRL+SHIFT+ENTER]

I nomi non ancora inseriti nella settimana prescelta, daranno cella vuota.

Allego il file, che ho predimensionato con 8 nuove settimane per 9 nominativi potenziali in foglio1 e con 100 inserimenti in foglio2, espandibili entrambi a proprio piacimento, con l'accortezza di adattare i riferimenti in formula.

Saluti

Paolo
 

Allegati

zilio82

Nuovo utente
27 Gennaio 2017
7
1
Milano
Excel 2010
0
Ti ringrazio moltissimo, quello che mi ha suggerito è già molto!

Tuttavia c'è un problema: nel tuo file, la cella in Foglio1!C7 (relativa ad Augusto al 12 giugno) risulta vuota. Ciò in quanto in Foglio2 non ci sono modifiche che riguardano Augusto. Però, qualora non ci fossero modifiche ad un agente, la cella in Foglio1!C7, corrispondente alla data 12 giugno, dovrebbe restituire il valore corrispondente al periodo precedente (Foglio1!B7).

Puoi/potete aiutarmi in questo?
Grazie
 

paolodig

Utente abituale
Expert
10 Novembre 2016
330
18
Roma
Excel 2007
0
Allora in Foglio1, C2, la matriciale diventa questa:

=SE.ERRORE(SE(E(VAL.ERRORE(INDICE(Foglio2!$B$2:$D$100;PICCOLO(SE(Foglio2!$B$2:$B$100=$A2;SE(Foglio2!$A$2:$A$100>B$1;SE(Foglio2!$A$2:$A$100<=C$1;RIF.RIGA(Foglio2!$B$2:$B$100))));CONTA.PIÙ.SE(Foglio2!$B$2:$B$100;$A2;Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1))-(1);3));$A2<>"";CONTA.PIÙ.SE(Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1)>0);B2;INDICE(Foglio2!$B$2:$D$100;PICCOLO(SE(Foglio2!$B$2:$B$100=$A2;SE(Foglio2!$A$2:$A$100>B$1;SE(Foglio2!$A$2:$A$100<=C$1;RIF.RIGA(Foglio2!$B$2:$B$100))));CONTA.PIÙ.SE(Foglio2!$B$2:$B$100;$A2;Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1))-(1);3));"")

Per girare pero' sono necessarie due condizioni, che pero' ritengo implicite nella logica del processo:

1) in foglio2, ogni nuovo inserimento NON deve avere data inferiore rispetto al precedente inserimento.

2) ci deve essere almeno 1 inserimento a settimana (se in una settimana non viene fatto neanche un inserimento, in essa ci saranno le celle vuote su tutti senza il richiamo alla precedente settimana). Se proprio questa improbabile evenienza si dovesse realmente verificare, basta fare, a settimana chiusa, n. 1 inserimento manuale "forzato" senza variazione (es: DATA nella settimana, TIZIO, lascia DIGITAL, passa DIGITAL)

Allego file
 

Allegati

Ultima modifica:

zilio82

Nuovo utente
27 Gennaio 2017
7
1
Milano
Excel 2010
0
Ancora grazie mille

Ti chiedo cortesemente un'ulteriore spiegazione per la condizioni indicata al punto 2: qualora non ci sia nessun movimento nell'arco della settimana di riferimento (è assolutamente e altamente probabile, in realtà) è necessario che per ogni agente sia inserita una modifica forzata (dove partenza e arrivo coincidono) oppure è sufficiente che tale modifica forzata sia effettuata per un solo agente (e ciò è sufficiente a non creare problemi all'intera colonna di riferimento)???

Grazie mille
 

paolodig

Utente abituale
Expert
10 Novembre 2016
330
18
Roma
Excel 2007
0
Ci stavo giocando un po', ed ho trovato una variazione per evitare quell'inserimento forzato, pero' ho dovuto introdurre la volatile OGGI() che ferma le valorizzazioni alla settimana corrente (nel senso che oggi vedi le valorizzazioni della settimana corrente, poi le settimane successive le vedi man mano che inserisci realmente nei giorni di quella settimana). Senza questa cosa, vedresti tutta la tabella già automaticamente compilata con l'ultimo inserimento presente per ogni persona. Se pero' devi inserire di volta in volta la colonna della nuova settimana solo quando essa inizia, allora il problema non si pone.

In Foglio1, C2, matriciale:

=SE(O($A2="";OGGI()<C$1-7);"";SE(VAL.ERRORE(INDICE(Foglio2!$B$2:$D$100;PICCOLO(SE(Foglio2!$B$2:$B$100=$A2;SE(Foglio2!$A$2:$A$100>B$1;SE(Foglio2!$A$2:$A$100<=C$1;RIF.RIGA(Foglio2!$B$2:$B$100))));CONTA.PIÙ.SE(Foglio2!$B$2:$B$100;$A2;Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1))-(1);3));INDICE($B2:B2;;COLONNE($B2:B2));INDICE(Foglio2!$B$2:$D$100;PICCOLO(SE(Foglio2!$B$2:$B$100=$A2;SE(Foglio2!$A$2:$A$100>B$1;SE(Foglio2!$A$2:$A$100<=C$1;RIF.RIGA(Foglio2!$B$2:$B$100))));CONTA.PIÙ.SE(Foglio2!$B$2:$B$100;$A2;Foglio2!$A$2:$A$100;">"&B$1;Foglio2!$A$2:$A$100;"<="&C$1))-(1);3)))

Allego file
 

Allegati

zilio82

Nuovo utente
27 Gennaio 2017
7
1
Milano
Excel 2010
0
Ti ringrazio molto...in questi giorni sono via, lunedì rientro stabilmente al pc e ti faccio sapere... grazie ancora!
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!