Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

calcolo scadenza con excel! Please a10n11... Opzioni
plutus
Inviato: Sunday, November 09, 2008 9:59:27 PM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Ciao a tutti,
mi sono appena iscritto a questo forum perchè lo reputo parecchio interessante e soprattutto di molto aiuto.
Vengo al problema:
Dovrei calcolare in excel una certa data di scadenza, partendo da una data fissa e sommando un tot numero di giorni...
Fin qui tutto semplice! Ho impostato il formato cella in data e poi faccio una semplice somma tra la data inserita e i giorni che devono trascorrere da quella data. Il problema è che vorrei fare in modo che il calcolo salti il periodo 1/8-15/9 di un determinato anno. Esempio: data iniziale= 01/07 + 90gg dovrebbe dare 29/09. Però io voglio che salti quei famosi 45gg che intercorrono tra l'1/8 e il 15/09... quindi dovrebbe essere il 13/11... Come fare???
Fatto ciò, come faccio a far spostare in automatico la data di scadenza al primo giorno lavorativo successivo se quest'ultima dovesse cadere in un giorno festivo o domenicale?

Grazie in anticipo ragazzi.. so che siete dei genii in excel, ecco perchè confido in voi!

Saluti
Sponsor
Inviato: Sunday, November 09, 2008 9:59:27 PM

 
a10n11
Inviato: Monday, November 10, 2008 2:26:40 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Vediamo se ho capito bene:

Nel caso che le scadenze siano comprese tra la data del 01/08 - 15/09 , le scadenze dovranno essere procrastinate di 45 giorni.
se è così, supposto che la data sia in cella A7 e che nelle celle da J1 a J11 siano elencate le festività che nel 2008 sono le seguenti:

01/01/2008.......
06/01/2008...... epifania
24/03/2008...... lunedì pasqua
25/04/2008...... liberazione
01/05/2008...... festa lavoro
02/06/2008...... festa repubblica
15/08/2008...... ferragosto
01/11/2008...... ognissanti
08/12/2008...... Immacolata
25/12/2008...... Natale
26/12/2008...... Santo stefano

la formula potrebbe essere la seguente:

=A7+90+SE(O(A7<DATA(ANNO(A7);8;-90);DATA(ANNO(A7);9;15)<=A7);0;45)+SE(GIORNO.SETTIMANA(A7+90+SE(O(A7<DATA(ANNO(A7);8;-90);DATA(ANNO(A7);9;15)<=A7);0;45);2)=7;1;0)+SE(VAL.ERRORE(CONFRONTA(A7+90+SE(O(A7<DATA(ANNO(A7);8;-90);DATA(ANNO(A7);9;15)<=A7);0;45);J1:J11;0));0;1)

prova a vedere se restituisce i giusti valori.
saluti
Andrea


plutus
Inviato: Monday, November 10, 2008 7:58:42 PM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Ciao Andrea, grazie mille per la celere risposta!
Purtroppo credo di essermi espresso in modo un pò confuso... Adesso cercherò di essere più preciso!
Allora, ciò che cerco di realizzare è un sistema in cui da una data qualsiasi, aggiungendo un tot numero di giorni qualsiasi, mi restituisca una scadenza risultante dalla somma tra la data da me inserita e il numero di giorni specificati. Fin qui è molto semplice perchè se per ipotesi metto in A1 una data e in A2 il numero di giorni da sommare, in A3 avrò il risultato di tale somma. Il problema è che tale risultato deve tenere conto di una serie di condizioni:

- la prima è che il calcolo dei giorni deve interrompersi a partire dal 1/8 e riprendere, per i restanti giorni, dal 15/9 (ovviamente se nel calcolo considerato viene interessato il periodo 1/8-15/9)
ES: 01/07 + 35 gg = 20/9 (ovvero al 31/7 si blocca il calcolo a 30 gg e per i restanti 5 riparte dal 15/9); Se invece devo calcolare 20 giorni dal 20/2, il risultato dovrebbe essere il 12/03 (perchè non c'è alcuna sospensione nel calcolo della scadenza)

- la seconda condizione è che se la scadenza così calcolata dovesse cadere di Domenica o in un giorno festivo, il risultato dovrebbe automaticamente slittare al primo giorno lavorativo successivo e magari avvertirmi di tale slittamento colorando la cella per esempio.

Sto impazzendo perchè non riesco a venirne a capo... se potessi darmi qualche dritta te ne sarei grato!
Scusami ancora se sono stato poco chiaro... spero almeno che questa volta sia riuscito a trasmetterti ciò che ho in mente... A presto,

Fabri
a10n11
Inviato: Monday, November 10, 2008 10:35:21 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Non consideare la formula precedentemente postata, alla luce delle nuove indicazioni, considerando che i numeri di giorni da aggiungere alla data possono essere variabili, ipotizzando che in cella A7 tu abbia la data, in cella B4 il numero dei giorni di incremento e nel range J1:J11 le festività,
prova questa:

=A7+B4+SE(O(A7<DATA(ANNO(A7);8;-B4);DATA(ANNO(A7);9;15)<=A7);0;45+1)+SE(GIORNO.SETTIMANA(A7+B4+SE(O(A7<DATA(ANNO(A7);8;-B4);DATA(ANNO(A7);9;15)<=A7);0;45+1);2)=7;1;0)+SE(VAL.ERRORE(CONFRONTA(A7+B4+SE(O(A7<DATA(ANNO(A7);8;-B4);DATA(ANNO(A7);9;15)<=A7);0;45+1);J1:J11;0));0;1)


se in A7 metti il valore 01/07/08 in cella B4 il valore 35 otterrai 20/09/08

a meno che non mi si sia fuso il cervello ora dovrebbe andare.
saluti
Andrea

a10n11
Inviato: Tuesday, November 11, 2008 10:47:28 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Visto che la cosa ha stuzzicato la mia curiosità, per semplificare il tutto ti propongo anche una funzione personalizzata.

Public Function Delay(Mdata As Date, Mgiorni As Integer)
Dim x As Date
mioarray = Array("01/1", "06/1", "24/3", "25/4", _
"01/5", "02/6", "15/8", "01/11", "08/12", "25/12", _
"26/12")
x = Mdata + Mgiorni
Yrs = Year(x)
If x >= "01/08/" & Yrs And x <= "15/09/" & Yrs Then
If Mdata >= "01/08/" & Yrs And x <= "15/09/" & Yrs Then
Fdelay = Mgiorni + CDate("15/09/" & Yrs)
Else
Fdelay = x + 45
End If
dw = Application.WorksheetFunction.Weekday(Fdelay, 2)
For N = 0 To UBound(mioarray)
If Day(Fdelay) & "/" & Month(Fdelay) = mioarray(N) Then
Fdelay = Fdelay + 1
End If
Next N
If dw = 7 Then Fdelay = Fdelay + 1
Delay = Fdelay
Else
dw = Application.WorksheetFunction.Weekday(x, 2)
If dw = 7 Then x = x + 1
For N = 0 To UBound(mioarray)
xxxx = Day(x) & "/" & Month(x)
If Day(x) & "/" & Month(x) = mioarray(N) Then
x = x + 1
End If
Next N
Delay = x
End If
End Function


Devi copiare tutto il codice qui sopra ed incollarlo in un modulo standard di VBA
ecco la procedura: Alt+F11 entri in ambiente editor VBA- Menù Inserisci>Modulo
Nella finestra bianca che si aprirà sulla destra incolla tutto il codice sopra riportato.
Alt+F11 ritorni al foglio di lavoro.

Trovari nell'elenco delle Funzioni nella sezione "Definite dall'utente" la funzione "Delay"
aprendo tale funzione dovrai indicare la cella contenete la data da elaborare ed inserire i giorni di incremento.
es: =Delay(A7;10)

prova
saluti
Andrea



plutus
Inviato: Tuesday, November 11, 2008 2:25:24 PM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Grazie mille Andrea,
tra un pò proverò e ti farò sapere!
Quanto alla prima formula ho riscontrato alcuni problemini che in seguito ti illustrerò.
in generale, cmq, la formula va benissimo... serve giusto qualche ritocchino!
A dopo allora... grazie ancora

Fabri
plutus
Inviato: Wednesday, November 12, 2008 2:29:56 AM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Ciao Andrea,
scusa il ritardo nella risposta ma non ho avuto uno spiraglio di tempo libero, e come vedi solo adesso che è notte posso dedicarmi un pò al problemino excel.
La funzione in VBA credo sia un problema perchè il "programmino finale" potrebbe dover girare anche su openoffice.. e lì non credo che possa andar bene....
Ho provato ad apportare qualche modifica sulla base della formula da te elaborata... ma casco proprio sulla cosa secondo me più semplice!
Infatti, posto che in un ampio intervallo di celle (J1:J739) ho delle date anche ordinate a casaccio, e che in una altra cella (G11) ho una determinata data... come faccio a verificare che quest'ultima si trovi all'interno dell'intervallo (J1:J739) ??? Dovrei fare in modo che se trovi riscontro restituisca 1, altrimenti 0.
ES: in G11 ho la data 12/11/2008... se questa si trova anche tra quelle inserite tra J1:J739 deve darmi 1, altrimenti 0.
So che è una banalità... ma proprio non riesco a trovare una soluzione!
Grazie ancora, sei davvero gentilissimo!!!

Fabri
a10n11
Inviato: Wednesday, November 12, 2008 8:28:56 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
cercare la presenza di una corrispondenza esatta:

=SE(VAL.ERRORE(CONFRONTA(G11;J1:J739;0));0;1)

saluti
Andrea

plutus
Inviato: Wednesday, November 12, 2008 2:28:18 PM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Grazie Andrea,
in effetti avevo provato questa funzione ma ero convinto che lo "0" alla fine fosse VERO e l' "1" fosse FALSO... invece mi sono reso conto che è al contrario!
Però se per esempio faccio =SE(A1="SI";G1;G2) il valore G1 non dovrebbe essere VERO e G2 FALSO? ...come mai in questa funzione =SE(VAL.ERRORE(CONFRONTA(G11;J1:J739;0));0;1) VERO e FALSO mi risultano al contrario? Boh?!? ...mistero - per me ovviamente :)

Grazie sempre,

Fabri
a10n11
Inviato: Wednesday, November 12, 2008 7:40:32 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
plutus ha scritto:
Grazie Andrea,
in effetti avevo provato questa funzione ma ero convinto che lo "0" alla fine fosse VERO e l' "1" fosse FALSO... invece mi sono reso conto che è al contrario!
Però se per esempio faccio =SE(A1="SI";G1;G2) il valore G1 non dovrebbe essere VERO e G2 FALSO? ...come mai in questa funzione =SE(VAL.ERRORE(CONFRONTA(G11;J1:J739;0));0;1) VERO e FALSO mi risultano al contrario? Boh?!? ...mistero - per me ovviamente :)

Grazie sempre,

Fabri


La sintassi della funzione SE è corretta Test;Vero;Falso

nella formula che ti ho indicato, il Test è il seguente: Se l'operazione "Confronta" restituisce un errore(VERO) (ciòè non trova nessuna corrsipondenza) metti 0, se non restitusice errore(FALSO) metti 1

Se invece avessi scritto la formula:
=SE(NON(VAL.ERRORE(CONFRONTA(G11;J1:J739;0)));1;0)

a questo punto VERO=1 FALSO=0

saluti
Andrea

plutus
Inviato: Wednesday, November 12, 2008 11:42:06 PM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Grazie ancora Andrea per la pazienza.... credo che avrò bisogno ancora del tuo aiuto per ultimare il programmino che ho in mente.
Spero di poter contare ancora sul tuo pezioso aiuto!
Grazie,

Fabri
plutus
Inviato: Friday, November 14, 2008 1:55:14 AM
Rank: Newbie

Iscritto dal : 11/9/2008
Posts: 7
Ho finalmente terminato il programmino excel... e devo dire che fino ad ora funziona a meraviglia!
Adesso lo farò testare a un pò di colleghi per verificare che non ci siano bugs!!!
Grazie mille ancora per le dritte... A presto

Fabri
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.