Microsoft Office Excel
uređuje Dragan Grbić

Bookmark and Share
Matična strana sajta
  Novo na sajtu
  Mapa sajta
  Beleške
  Kontakt
  Pretraga MSKB

 Blog Praktikuma
  RSS feed
  P@W @Tw

  Izvezi stranicu u PDF
 
Office Praktikum

Još o Excelu
 


Skoro svakodnevno slušamo
  Radio Paradise:
  eklektični muzički online radio bez reklama!
 

 
       

Sponzori sajta

SBB CS 1.6 game server: 82.117.200.1
 
Connectivity by SBB

 
Suština pasijansa
Suština pasijansa
 


 

Informacije

NOVOSTI

I još dva nova priloga o Excelu
Novi prilozi o Wordu
Novi i prilozi u temi "razno o Officeu"
Novi članci o novostima u Officeu 2010!

SADRŽAJI ZA PREUZIMANJE

Lokalizacija Total Commandera 7.51Obe jezičke školjke za popularni program na srpskom sad funkcionišu u bilo kojoj varijanti Windowsa!
RNDalica.ExcelDodatak za Excel 2007/2010 za generisanje slučajnih podataka!
YuConv.ExcelDodatak za Excel 2007/2010 za konverziju pisama!
YuConvNetDodatak za Word 2007/2010 za konverziju pisama i kodnih rasporeda!

SKREĆEMO PAŽNJU

Kako pretraživati MSKB
a pronaći ćete i još mnogo novih sadržaja...

KONTAKT

Da li znate za pravila koja važe pri kontaktu sa nama? Molimo vas da se obavestite o tome!
 
POZIVAMO VAS

i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.

  (C) 2000-2010 Praktikum na Webu
 

Greške u razlici datuma

Nivo:  NIVO 3 - klinite za objašnjenje


Izračunavanja datuma u Excelu su zasnovana na činjenici da se datum interno čuva kao specifični redni broj počev od 1.1.1900. godine. Možete i sami da proverite: ukoliko pravilno unesete neki datum u ćeliju (što uobičajeno znači da treba da zanemarite tačku na kraju godine), sadržaj će biti poravnat udesno, što je generička provera pravilno unetog broja.

Za overu internog zapisa, promenite format broja iz datumskog u opšti: pritisnite Ctrl+1 i uđite u dijalog za izmenu formata ćelije, pa na prvoj kartici Number (Broj), umesto zatečene kategorije datuma postavite prvi oblik General (Opšti format) i dobićete obični broj. Na primer, 1. maj 2007. će biti preinačen u broj 39203.

Da biste dobili razliku dva datuma, izvešćete prosto oduzimanje izrazom poput =A2-A1. Ranije sam vam preneo i trik da izbegnete automatsko prebacivanje rezultata u fantomski datum: ispišite formulu kao =(A2-A1) i dobićete prosti broj.

Međutim, to ponekad nije dovoljno. Relativno često dobijam pitanja koja se odnose na iskazivanje radnog staža radnika. Tada prosti izrazi poput pomenutog ne prolaze; štaviše, čak i "fantomski" datum ne iskazuje pravilan račun; pomenuta primena zahteva ispis poput "10 godina, 2 meseca, 3 dana".

Kada slične potrebe dođu na red, moj prvi impuls je da potegnem za VBA funkcijom - dobro je poznata stvar da ovaj jednostavni programski jezik predstavlja snažnu alatku za proširenje Excela. Ali, ponekad se okliznemo na lakoću upotrebe, pa dođe do greške: ko zna koliko je dugo u Office Praktikumu zaostao prilog koji je davao neispravan račun razlike datuma koji se izražava na traženi način. To je došlo nedavno u prvi plan, kad mi se za pomoć obratio moj stari prijatelj i kolega Dragomir Kalaba, kome je trebalo rešenje za iskazivanje dužine radnog staža u spisku radnika. Bilo je poželjno da nađemo rešenje bez primene VBA. Nije retko da dobijam takve zahteve; oni su ponekad opravdani, a ponekad ne. U ovom slučaju, potraga za rešenjem u obliku nekog složenog izraza je postalo zanimljivo iskušenje.

Uzgred, ta mozgalica je dovela do neverovatnog obrta, jer je iskorišćen detalj za koji sam mogao da se zakunem da je neizvodljiv u Excelu. Po ko zna koji put, uverio sam se da samo loše obavešten korisnik može da tvrdi kako zna sve o nekom složenom programu... O tome ćete saznati malo kasnije.

Excel raspolaže baterijom zanimljivih funkcija za rad sa datumima, što možete ispitati ako otvorite alatku za umetanje funkcije; najlakše je da kliknete na dugme fx koje se nalazi levo od linije za unos iznad radnog lista, pa da izaberete kategoriju funkcija za rad sa datumima. Međutim, kad je konkretni problem posredi, tu nastaje "mali" problem: većina tih funkcija zasebno tretira delove datuma (dan, mesec ili godinu), a s obzirom na to da meseci nisu iste dužine, pa još postoje prestupne godine, lako je da se desi greška u rezultatu. A onda, u pokušaju da napravimo jednostavniju formulu, ponekad smo skloni da ugradimo "namernu" grešku, pretpostavljajući da one neće bogzna koliko uticati na krajnji ishod nekog posla. Aritmetika je nedvosmislena: rezultat je ili tačan ili nije, pa se pristup "otprilike tačno" ne može smatrati ozbiljnim.

Upravo takav, pogrešan pristup možete videti na listingu, kao formulu 1, čije jezgro čini funkcija YEARFRAC. Tu je potpuno zanemarena razlika u brojevima dana u mesecima, jer sam svaki mesec sveo na 30 dana.

Formula 1:

=INT(YEARFRAC(B2;A2))&" godina, "&INT(MOD(YEARFRAC(B2;A2);1)*12)&" meseci, "&ROUND(MOD(MOD(YEARFRAC(B2;A2);1)*12;1)*30;0)&" dana"

Formula 2 je "kobasica" koja me neodoljivo podseća na one koje u svojim knjigama objavljuje John Walkenbach, jedan od najpoznatijih Excel gurua na svetu. Međutim, i pored prilično detaljnog razvoja varijanti razlika u brojevima datuma i meseci unutar datuma, čak i tu je moguća greška.

Formula 2:

=YEAR(B2)-YEAR(A2)-IF(OR(MONTH(B2)<MONTH(A2); AND(MONTH(B2)=MONTH(A2);DAY(B2)<DAY(A2)));1;0)&" godina, "&MONTH(B2)-MONTH(A2)+IF(AND(MONTH(B2)<=MONTH(A2);DAY(B2)<DAY(A2));11;IF(AND(MONTH(B2)<MONTH(A2);DAY(B2)>=DAY(A2));12;IF(AND(MONTH(B2)>MONTH(A2);DAY(B2)<DAY(A2));-1)))&" meseci, "&B2-DATE(YEAR(B2);MONTH(B2)-IF(DAY(B2)<DAY(A2);1;0);DAY(A2))&" dana"

Dajući primer tog izraza spram mog "rešenja", kolega Kalaba me je upozorio na to, a zatim napomenuo da ne bi trebalo tražiti rešenje među prve dve formule, nego je "verovatno najbolje" da primenimo rešenje u formuli 3. Da, zaista je najbolje...

Formula 3:

=DATEDIF(A2;B2;"y")&" godina, "&(DATEDIF(A2;B2;"ym")&" meseci, ") &(DATEDIF(A2;B2;"md")&" dana")

U prvi trenutak nisam ni primetio najbitniji detalj: tokom prepiske sa kolegom, ovo rešenje sam dobio u uzorku Excel radne sveske, sa očigledno ispravnim rešenjem.

A onda sam najzad primetio... Nisam verovao svojim očima: funkcija DATEDIF???
 

Koliko mi je (bilo) poznato, ta funkcija ne postoji u Excelu; sećam se i davne rasprave sa kolegom Mihaljevim, koji mi je naglasio koliko je lakše baratati datumima u Accessu baš zbog prisustva te funkcije.

Teorija je jedno, a praksa drugo: zaista nećete naći funkciju DATEDIF u spisku Excel funkcija; ali, ako je jednom unesete, dobićete ispravan rezultat! Ako nad ćelijom sa funkcijom ponovo pozovete obrazac za unos funkcije, dobićete uredan raspored argumenata (doduše, bez uobičajenog opisa). I rezultati će biti valjani: to možete videti u primeru na slici.

Ako vas interesuje upotreba funkcije, obratite pažnju na treći argument; isprobajte varijante "y", "m", "d", "ym" i "md" (svaki put pišite obeležje pod navodnicima) i lako ćete razumeti način interpretacije ove zanimljive funkcije. A kao dokaz celishodne upotrebe funkcije, pogledajte na slici kako su tri funkcije iz priloga izračunale razliku dva polazna datuma: prva dva rezultata su neispravna! Rešenje sa funkcijom DATEDIF je isprobano u dve poslednje verzije Excela; sasvim je moguće da je raspoloživo i u nekim starijim verzijama programa.

 

  (C) 2000-2011 Praktikum na Webu

PC 133


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

Copyright © Praktikum na Webu, 2000-2011; Valinor Design; sva prava pridržana.