Sunteți pe pagina 1din 8

Gestiunea activităţilor în timp cu Microsoft Excel:

formule, macro-uri şi dezvoltare grafică

Autor: Francesco Capuzzo


Coordonator didactic: Conf. Univ. Dr. Dana Simian
Universitatea “Lucian Blaga” Sibiu
Facultatea de Ştiinţe – profil Informatica

Abstract:
The present work wants to show how Microsoft Excel can be used not only for calculation,
but as a graphic interface to help activities’ planning. Mainly in the industrial field, one work
centre can execute one operation at a time. While receiving many orders, often from different
suppliers, they don’t take care of human and machine load. Using the described spreadsheet it’s
possible to distribute all the incoming orders (“called Not Programmed Actions”) on a single line,
graphically, and do the same with the programmed actions. As a result we obtain a very user
friendly view of the actions to be executed, instead of lots of confusing information and data. What
the final user has to do is just enter the needed information, previously extracted from the
administration program, and run a macro.

Lucrarea de faţă vrea sa arate cum poate fi folosită foaia de calcul Microsoft Excel pentru
gestiunea timpului şi a activităţiilor. Se presupune că nu este posibil să se facă mai mult de o
activitate în acelaşi timp. Acest lucru este deosebit de adevărat în mediul industrial: putem mări
viteza producţiei, dar nu putem efectua producţia sau montajul decât a unui articol la rând. Totuşi se
întâmplă să avem mai multe activităţi planificate, şi furnizorul sau furnizorii noştri ne cer acea data
livrării pentru articole care se pot produce sau monta la un centru de lucru anume. Este datoria
noastră să le organizăm în aşa fel încât să nu se suprapună, garantând o încărcare la 100% acolo
unde este programată o lucrare. Bineînteles, o planificare gresită cu, de exemplu 2 articole deodată,
reprezintă o încărcare la 200%. Timpul necesar pentru realizarea/producţia fiecărui articol este
stocat într-o pagină separată a foii de calcul, sau într-o foaie diferită.
In această prezentare se vor deosebi Activităţiile Programate (prescurtat AP) şi Activităţiile
NeProgramate (prescurtat AN).

AP (Activităţiile Programate) se calculează după cum urmează:

Data de azi
+
Art. A: Bucăţi * timp necesar pentru realizarea
+
Art. B: Bucăţi * timp necesar pentru realizarea
+
...................
+
Art. n : Bucăţi * timp necesar pentru realizarea

Această sumă trebuie realizată folosind funţia WORKDAY: în acest fel nu vor fi ţinute în
considerare sâmbetele, duminicile şi zilele nelucrătoare. Apoi se va ţine cont de o marjă de eroare la
timpul necesar pentru realizarea şi, eventual, de un timp adiţional pentru ambalaj şi control calitate
sau verificare.
Fig.1: Activităţiile Programate: reprezentare grafică
Data de Sfârşitul Timp Ambalare - Termen de
azi activităţii adiţional control - predare -
(Început) verifica livrare

Dacă activitatea se opreşte, Timpul Adiţional se reduce progresiv până când nu mai este timp util
pentru a termina şi se generează o întârziere.

Date de intrare
Datele de intrare sunt:
1. codul univoc a fiecărui articol
2. număr de bucăţi cerute
3. timp necesar pentru realizarea (executarea) exprimat în bucăţi pe ora
4. data predării.

Calculul în Excel: data de azi este returnată de către funcţia NOW, care cuprinde şi data şi ora. Ora
trebuie eliminată din calcul, fiindcă în mod normal nu este prezentă în celelalte formule, nici nu este
cerută. Pentru a o elimina (în acest caz nu putem folosi funcţia RIGHT pentru că lungimea datei nu
este regulară) procedăm astfel:
1. extragem componentele ei cu funcţiile DAY, MONTH, YEAR
2. re-compunem cele de sus cu funcţia DATE.
La calculul nostru vom ţine cont numai de orele în care firma este deschisă: ora deschiderii şi
închiderii vor fi memorate în două căsuţe diferite. Apoi vom elimina din calcul orele nopţii. Fiind
acestea în format oră, vom converti formatul oră în format zi:
24 ore = 1 zi
8 ore = 0,333333333 zi (o zi de lucru)
16 ore = 0,666666667 zi (o noapte)
pentru că Excel vede formatul data ca un format numeric care începe din 01.01.00 (1 ianuarie 1900)
şi adaugă o unitate pentru fiecare zi (de exemplu 23 mai 2008 = 39591 în format numeric).
Corespondenţa între ora actuală si ora început şi sfârşitul activităţii se obţine cu funcţiile
HOUR, MINUTE, SECOND şi apoi cu TIME, asemănător cu ce s-a descris mai sus pentru data.
Pentru a putea folosi funcţia WORKDAY, este necesar ca să fie memorate pe o coloană datele cu
sărbătorile legale, căruia îi vom atribui un nume prin meniul Insert-Name-Define, şi le vom ordona
crescător pentru a le putea folosi ulterior cu funcţii de căutare. Vom micşora termenul de
predare/livrare cu zilele stabilite pentru ambalare, control/verifică. Fiind toate formule legate cu
funcţia NOW, se vor actualiza toate cu un simplu macrou: se selectează o formulă oarecare cu F2 şi
se apasă Enter.
Reprezentarea grafică pentru AP
Pe o foaie nouă de calcul vom face un calendar pe coloane cu data şi
ziua a săptămânii (fig.2).
Pe o altă foaie nouă de calcul (fig. 3), în care se vede în roşu, cu ajutorul unei
formatări condiţionate, ziua curentă, se vor introduce următoarele:
Rând 1. datele pe un rând, cu complectare automatică, din dată de azi
până la dată dorită.
Rând 2. o formulă care afişează, numai pentru calculele următoare,
dacă ziua de mai sus este o sâmbătă, o duminică sau o sarbătoare
legală (funcţii IF şi VLOOKUP). Acest rând va fi ascuns.
Fig. 2: calendar
Rând 3. Un rând mai jos se va introduce o formulă care face referire la
dată corespunzătoare la o celula mai sus prin funţia VLOOKUP, care va returna prin căutare
în calendar dacă (funcţia IF) acea dată este sau nu o zi de week-end sau sărbătoare legală şi
va afişa textul „sărbătoare legală”. Cu o formatare condiţionată se vor evidenţia cu culori
diferite zilele nelucrătoare.
Rând 16. se va introduce un alt rând de formule, cel care va afişa reprezentarea grafică a
activităţilor. Formula respectivă va verifica dacă data din coloana respectivă două rânduri
mai sus este cuprinsă între Data Începutul Activităţii şi Data Sfârşitul Activităţii, şi să nu fie
nici o sărbătoare legală. Dacă toate condiţile sunt respectate, se va restitui de exemplu
valoarea 1. Cu o formatare condiţionată, textul tuturor căsuţelor din rândul respectiv va fi
transformat în alb, şi la căsuţele care vor conţine numărul 1 se va atribui o culoare de text şi
de fundal care să le evidenţieze.
Rând 17. preia datele dintr-un tabel Pivot care ne spune, după data predării, ce cantitate trebuie
să predăm. Cu o funcţie VLOOKUP confruntăm dacă data din primul rând este în acel tabel.
În caz afirmătiv va fi afişată.
Numerotarea nu este liniară fiindcă unele rânduri sunt ascunse. Ele conţin încă trei situaţii
asemănătoare, dar bazate pe alte date de intrare.
Fig.3: reprezentare grafică pentru AP

Formulele conţinute în figură 3, coloana J:


Rând 1. nici o formulă, numai data
Rând 2. =IF(J3="sâmbătă";"sarbatori";IF(J3="duminică";"sarbatori";IF(VLOOKUP(J1;
sarbatori;1)=J1;"sarb.legala";"")))
Rând 3. =IF(VLOOKUP(J1;sarbatori;1)=J1;"sarb.legala";VLOOKUP(J1;calendar;3;
FALSE))
Rând 16. =IF(J$1<dataDeAzi;"";IF(J$1>sfProdUniversali;"";IF(J$2="sarbatori";"";IF(J$3
= "sarb.legala";"";1))))
Rând 17. =VLOOKUP(J$1;termexec;2;FALSE)

AN (Activităţiile NeProgramate):
Pentru Activităţiile NeProgramate trebuie procedat altfel decât pentru cele programate. AN
pot fi deja înlănţuite din punctul de vedere al timpului, adică să nu se suprapună. În cazul în care ele
nu sunt înlănţuite, adică în cazul cel mai frecvent, trebuie înlănţuite. Cu următorul exemplu (fig.4)
se pot vedea cele două situaţii din punctul de vedere grafic: cele trei activităţi se suprapun în
anumite zile, generând o supraîncărcare. Este necesar să fie înlănţuite, ca primul pas, cel mai
important (fig.5). În figura 5 se vede cum a fost menţinută numai dată predării cea mai îndepărtată,
în timp ce celelalte au fost re-calculate astfel:
nouă data predării a art.2 = data începutul activităţii a art. 1 – 1 zi. În exemplul nostru
vechea data predării a art.2 (01.08.2008) devine 27.07.2008, şi nu mai trebuie considerată ca o dată
a predării, ci ca un fel de termen intern de execuţie. În figura 5 se poate vedea cum s-a ţinut cont şi
de sărbători, zile care trebuie scoase din calcul nefiind productive. De fapt, pentru a putea termina
executarea celor trei activităţi în timp util ca să fie complectate la data de 05.08.2008, va trebui
început cel târziu în data de 10.07.2008.
Fig.4: AN ne-înlănţuite

Fig.5: AN înlănţuite

Fig.6: AN înlănţuite şi fără sărbători

Din cele trei figuri exemplificative de mai sus se poate observa procesul de înlănţuire a
activităţiilor şi obţinerea datei minimă obligătorie pentru a putea termina activităţile la data dorită.
Reprezentarea grafică şi calculele pentru AN
Pentru a obţine cu Microsoft Excel un rezultat grafic ca cel de mai sus, trebuie trecut prin
mai multe formule. Se vor efectua urmatorii paşi de întroducere:
1. trebuie obţinute informaţiile dorite dintr-un tabel Pivot care ne restituie, din pagina care
conţine datele a Activităţiilor NeProgramate, Articolul, Termenul de Execuţie şi Cantitatea
care trebuie executată.
2. se stabileşte câte zile de lucru vrem să dedicăm, după caz, ambalatului, controlului calităţii
sau zile de siguranţă. Cu funţia WORKDAY reducem data predării (de exemplu o putem
micşora cu 4 zile, dar eliminând din calcul week-end-urile.
3. ca şi pentru AP, dar în mod contrar, se va calcula pentru fiecare articol data de început a
activităţii (sau producţiei) ţinând cont de nopţiile şi de week-end-uri. Pentru această
operaţie, asemenea ca pentru AP, se va ţine cont de timpul necesar pentru
realizarea/producţia articolului. Timpul prevăzut pentru efectuarea activităţilor pe articol va
fi transformat in format unitar, unde o unitate corespunde la o zi, cum am descris la pagină
2.
4. dacă este prevăzut că o activitate (articol) durează câteva ore sau o parte nesemnificativă a
zilei, este bine ca aceasta să nu fie înlănţuită şi să fie adăugată la o altă activitate programată
pentru acea zi.
5. o dată obţinute dăţile de început şi sfârşit pentru fiecare articol, acestea vor fi copiate şi
lipite pe două coloane noi ca valori, adică fără nici o formatare. Apoi vor fi ordonate
descrescător după data sfârşitului activităţii. Într-o coloană separată se va evidenţia diferenţa
între data început şi sfârşit (zile de lucru), la fiecare rând.

Din momentul în care am obţinut dăţile de început şi sfârşit pentru fiecare articol, ne aflăm
în situaţia din figură 4, dar din punctul de vedere grafic nu avem încă nimic. Pentru a proceda
mai departe şi a trece la aspectul grafic, suntem nevoiţi să efectuăm o verificare încrucişată.
Acest lucru înseamnă că pe vertical în marginea stângă vom avea o coloana de date, pe orizontal
în partea de sus vom avea un rând de date, şi corespundenţa vertical/orizontal între acestea va
genera o valoare de tip TRUE.
Cum putem vedea din figura următoare (fig.7), se trece prin mai multe etape pentru a putea
obţine înlănţuirea activităţilor. Aceste zone care conţin formule, de sus Până jos reprezentate cu
culorile galben, verde, albastru deschis şi alb, în file-ul original sunt mult mai ample.
Fig.7
1

2 4

6
7

Coloane ascunse, arată ca o


întrerupere a înlănţuirii care 8
de fapt nu există

Zonă cu nume
9 hlookupUniversali
1
1

Figura 7 ne arată următoarele:


1. toate zilele care vom ţine în considerare pentru calcul. Linia verticală apare din cauză că
unele coloane au fost ascunse pentru a facilita viziunea complexivă. Asemenea au fost
ascunse rândurile de la 105 la 172
2. în verde deschis: data început şi sfârşit ne-înlănţuite
3. în mov: diferenţă de zile între cele din punctul 2
4. în portocaliu: data început şi sfârşit după înlănţuire. În cele două coloane portocalii se fac
calculele pentru a obţine înlănţuirea. Cea din dreapta conţine următoarea formulă:
=IF(AH43="";"";IF(AK42>AK41;AK41-1;IF(HLOOKUP(AH43;dbUniversali;111)=
"G";AH43;IF(AH43>AJ42;AJ42-1;AH43)))) care verifică dacă sunt autorizate activităţi
nesemnificătive de durată de câteva ore (cautare în dbUniversali la rând 111 litera G, adică
rândul număr 314 din figură 7, care conţine formulă
=IF(SUM(FG$105:FG$203)=1;"G";"…..") în căsuţa FG314), şi celelalte calcule necesare
înlănţuirii. În coloana portocalie din stânga se află formula =IF(AG43="";"";AK43-AI43),
care este o simplă reactualizare a datei de început a activităţii, adică dată sfârşit minus zile
de lucru calculate în prealabil în coloana AI.
5. în partea colorata în galben, corespunzătoare la colţul stâng de jos, prima căsuţă (FG102)
care conţine numărul 1 conţine formula =IF(FG$1<=$AH102;IF(FG$1>=$AG102;"1";"")),
care restituie valoarea 1 dacă data din capătul superior a foii de calcul este cuprinsă între
cele două dăţi din rândul respectiv de pe coloana verde (punct 2).
6. coloana colorată în galben restituie suma orizontală a zilelor din rândul respectiv. La rândul
203 avem =COUNTIF($AP102:$HO102;1).
7. zona colorata în verde, din puntul 7, conţine formule pentru a verifica dacă valoarea de pe
căsuţa acelui rând este mai mare dacât 1, adică dacă articolul respectiv necesită mai mult de
o zi de lucru să fie executat. În acest caz se restituie valoarea 100, o cifră oarecare, dar de
impact vizual. Formula conţinută în căsuţa FG203 este:
=IF(FG102="";"";IF(FG102=FALSE;"";IF($HR203>1;100;VALUE(FG102)))).
8. în zona colorată în verde deschis, corespunzătoare la colţul stâng de jos (căsuţă FG295), se
află formula =IF(FG$1<=$AK94;IF(FG$1>=$AJ94;"1";"")), care restituie valoarea 1 dacă
data din coloana respectivă pe primul rând este cuprinsă între dată început şi sfârşit pe
rândul respectiv de pe zona portocalie, zonă unde se află datele înlănţuite.
9. ultima zonă de formule, cea albă, conţine la căsuţa FG405 formula
=IF(FG295="";"";IF(FG295=FALSE;"";VALUE(FG295))) care transformă cea de pe zonă
de mai sus în format valoare.
10. se vede înlănţuirea pe o singura linie orizontală. Formula conţinută în căsuţa FG414 este
=SUM(FG315:FG413). Acest rând de culoare roz închis corăspunde la rând număr 211 din
aria hlookupUniversali, la care face referire rândul număr 18 din figura următoare.

Reprezentarea grafică finală a înlănţuirii pentru AN


Fig.8

Macro-uri de
actualizare

Cu formula următoare
=IF(HLOOKUP(CK$1;$1:$2;2)="sărbători";"";HLOOKUP(CK$1;hlookupUniversali;211;FALSE)
) se introduce pe rândul 18 din figura 8 conţinutul din punctul 10 din figură 7. Fiind deja toate
datele calculate ţinând cont de week-end-uri şi sărbători, cu o formatare condiţionată se golesc
celulele cele corespunzătoare zilelor ne-lucrate. Pe rândul 19 se pot vedea unele numere care
corespund cantităţilor care trebuie predate/terminate în ziua din coloana respectivă pe rândul 1.

Consideraţii finale:
Datele de intrare se lipesc într-o zonă dedicată direct în foaia de calcul. Acţionând un
macrou se reactualizează tabele pivot şi se efectuează celelalte operaţii, astfel încât utilizatorul are
numai de făcut un copy/paste şi de apăsat butonul macrou-lui.
Când sunt numai puţine zile între sfârşitul AP şi începutul AN, acest lucru ne face să gândim
că o oprire a activităţii poate să ne ducă să nu mai putem să începem AN în timp util că să fie
terminate la data stabilită. De fapt o marjă de timp între ele este un factor esenţial pentru succesul
planificării activităţilor. Mai grav, după acel principiu, este cazul în care AP şi AN se suprapun:
acest lucru dovedeşte o incapacitate de terminare/predare a activităţilor, şi în mediu industrial o
nevoie de muncă adiţională prin schimburi.
În prezenta lucrare s-au reprezentat grafic patru centre de lucru (fig.9), după nevoia
plănificării producţiei a autorului timp in care a lucrat la firma Vimar România din Sibiu ca
responsabilul controlului călităţii şi planificatorul producţiei. Firma respectivă produce material
electric care desfăşoară în toată lumea, firma mamă fiind cea mai importantă, în domeniul ei, din
Italia. Lucrarea de faţă este folosită şi în prezent la firmă Vimar România.
Ca primă dezvoltare ulterioară, zonele de formule din figura 7 vor fi distribuite pe pagini
diferite, transpuse în asa fel încât lista datelor să fie pe vertical, unde poate fie dezvoltată mult mai
amplu.
Fig.9

Bibliografia: Francesco Capuzzo, Planificare grafică a producţiei folosind Microsoft Excel, Alba
Iulia, aprilie 2008.