Ročna izdelava koledarja je sicer mogoča in tudi dokaj preprosta, vendar je treba za vsak mesec vedeti, s katerim dnevom se začne in koliko dni ima, če pa želimo še označene sobote in nedelje, moramo to narediti ročno. Lahko kaj od tega avtomatiziramo? Seveda lahko. Pravzaprav skoraj vse. No, pa si izdelajmo preprost koledar.

V celico A1 zapišimo besedo Mesec, v A2 pa na primer 2, kar bo označevalo februar. V B1 nato vpišimo izraz Leto, v B2 pa 2015. A2 in B2 bosta naši sklicni polji, torej bomo izdelovali koledar za februar 2015. Če bomo pozneje hoteli koledar za kak drug mesec ali leto, bo treba spremeniti le ti vrednosti in koledar se bo samodejno ažuriral. Zdaj v polje recimo B4 vpišemo številko 1, v B5 2, v B6 3, nato pa vse skupaj zapolnimo navzdol do vrednosti 31, kolikor je največ dni v mesecu. Obarvajmo še sosednja dva stolpca, kjer bo vpisan dan v tednu in prostor za kaj dopisati. Kar zadeva ročno pisanje, je to vse. Od tu naprej bo vse skupaj »avtomatika«.

Naslednji korak je samodejno vpisovanje dneva v tednu. Sicer bi lahko res pogledali na stenski koledar in zadevo izdelali ročno, težava je le v tem, da bi morali to delati za vsak mesec posebej. Excel, in seveda tudi Calc, znata iz datuma sama ugotoviti, kateri dan v tednu je. In kako to narediti? Z uporabo funkcij WEEKDAY in DATE. Prva vrne dan v tednu glede na njegovo zaporedno številko, druga pa vrne zaporedno število določenega datuma. Postavimo se v celico C4, kamor bi radi vpisali prvi dan v tednu, in vanjo vpišimo formulo:

=WEEKDAY(DATE($B$2;$B$1;B4))

Kaj ta pomeni? Pravzaprav je vse jasno razen tistih vrednosti z dolarji, B-ji in številkami oziroma funkcija DATE(). Funkcija ima argumente DATE (leto; mesec; dan). Ker imamo leto vpisano v celici B2, je ta na prvem mestu, in ker se skozi celotno razpredelnico leto ne spreminja, smo tako vrstico kot stolpec »fiksirali« z znakom $. Enako velja tudi za mesec, ki se nahaja v celici B1. Vrednost B4 je dan v tednu, v našem primeru je to 1, kar skupno pomeni 1. februar 2015. Ker se bo dan v naši razpredelnici spreminjal, zadnje vrednosti nismo »fiksirali«. Ko pritisnemo Enter, vidimo, da se bo v celici prikazala oznaka »ned«, kar seveda pomeni nedeljo, in če pogledamo na koledar, vidimo, da je bil 1. februar res nedelja. Zdaj celico B4 »zgrabimo« za spodnji desni rob, kjer je kvadratek, in območje razširimo čez cel stolpec do dneva številka 31. Vidimo, da se dnevi lepo prikažejo.

Naslednji korak je označevanje vikendov, saj bi v koledarju radi imeli nazorno označene sobote in nedelje. To bomo izvedli prek funkcije pogojnega oblikovanja, o kateri smo v tej rubriki v preteklosti že veliko pisali. Izberemo našo razpredelnico (v našem primeru B4 do D34), nato v razdelku Osnovno funkcijo Pogojno oblikovanje, nato pa Novo pravilo. V oknu, ki se odpre, izberemo Uporabi formulo za določanje celic za oblikovanje. Zdaj v ukazno polje vpišemo formulo:

=WEEKDAY(DATE($B$2;$B$1;$B4);2)>5

Vidimo, da je dokaj podobna prejšnji, le da ima dva dodatka. Prvi je številka 2, drugi pa argument >5. Zakaj? Številka 2 pomeni, da naj se dnevi uporabijo v takšni obliki, da bo imel ponedeljek številko 1, torek 2 in tako naprej. S tem odpravimo morebitno nevšečnost, če bi naš Excel bil nastavljen tako, da je dan številka 1 nedelja. Mi iščemo soboto in nedeljo, ki bosta, glede na omenjeno dvojko, nosili zaporedno številko 6 in 7. In od tod tudi argument >5, kar pomeni, da naj se pri oblikovanju upoštevajo le zaporedne številke dni, ki so večje od 5, torej res sobote in nedelje. Zdaj prek gumba Oblika določimo še barvo celice in po želji še kak okrasek in vse skupaj potrdimo. Vidimo, da so se sobote in nedelje res ustrezno obarvale.

Zdaj manjka le še nekaj – vsi meseci nimajo 31 dni in v našem koledarju je malce smešno, ko vidimo, da je v njem 30. februar in da je to ponedeljek. Kako zadevo odpravimo? Spet s pogojnim oblikovanjem, s tem da označimo le dneve, ki bi lahko bili »viška«, torej del koledarja, ki pomeni 29., 30. in 31. v mesecu, kar v našem primeru pomeni področje B32:D34. Spet izberemo pogojno oblikovanje in izdelavo novega pravila, s tem da se zdaj formula glasi:

=DAY(DATE($B$2;$B$1+1;1)-1)<$B32

Nato prek gumba oblika izberemo, naj se besedilo obarva v belo, celice pa naj bodo brez polnila, in vse skupaj potrdimo. Vidimo, da so zdaj dnevi po 28. februarju prazni, kot to mora biti, če spremenimo mesec v april, pa bo prazen le 31. Zadeva torej deluje.

Nekaterim od vas bo dovolj, če formulo kar uporabite, drugi spet pa boste želeli izvedeti, zakaj ti čudni +1, -1 in podobni dodatki. No, pa razložimo, od kod tako čudna formula.

Excel je dokaj »pameten« program: tako pameten, da zna ugotoviti tudi, ali je neki datum veljaven. Kaj to pomeni? Pomeni, da zna na primer ugotoviti, da 29. 2. 2015 ni veljaven datum, saj to leto ni prestopno in ima februar zato le 28 dni. In kako vemo, da je Excel tako pameten? Vzemimo podoben primer, kot je v našem koledarju, kjer imamo v B1 leto, v B2 mesec, v B3 pa dodajmo še dan. Nato v B4 vpišimo formulo, ki bo iz teh podatkov zapisala datum. Formula se bo seveda glasila:

=DATE(B1;B2;B3)

Če zdaj namenoma uporabimo napačne vrednosti tako, da za leto vpišemo 2015, za mesec vpišemo februar, za dan pa 29, nam bo Excel vrnil datum 1. marec 2015. Ugotovil je namreč, da ima februar le 28 dni, in je samodejno preskočil v nov mesec.

To, da je Excel tako pameten, pa nam v tem primeru ne gre v korist, zato ga moramo pretentati. Najprej bomo mesecu (B2) v formuli dodali 1, dan (B3) pa spremenili v 1, da dobimo prvega naslednji mesec. Formula se bo torej glasila:

=DATE(B1;B2+1;1)

Njen rezultat bo seveda 1. marec. Zdaj od tega datuma odštejmo en dan in dobili bomo 28. februar, kar je veljaven datum. Zdaj vse skupaj še zapakiramo v funkcijo DAY(), da dobimo skupno število dni v tem mesecu. Formula bo zdaj:

=DAY(DATE(B1;B2+1;1)-1)

Če jo vpišemo, vidimo, da dobimo kot rezultat število 28, kolikor je dni v mesecu. Če zdaj to ponovimo za kak drug mesec, ugotovimo, da smo v bistvu izdelali majhen programček za računanje števila dni v posameznem mesecu.

V našem primeru zdaj to primerjamo z vrednostjo v polju B32, torej 29. Ugotovimo, da je vrednost res večja od 28, zato bo polje obarvano. In ker sta večja tudi B33 in B34, se bosta tudi onadva obarvala.

=DAY(DATE($B$2;$B$1+1;1)-1)<$B32

Enako načelo velja za vse mesece in zadeva res deluje tako, kot bi morala. V eni od prihodnjih rubrik trikov pa si bomo ogledali še, kako v naš koledar dodati praznike.

Moj mikro, marec – april 2015 | Miha Gradišnik