Prehod leta-problem SUM po ISOWeekNum

Pomoč pri delu z MS Excelom
Odgovori
bilioldi
Prispevkov: 10
Pridružen: Ne Apr 10, 2016 11:08 am

Prehod leta-problem SUM po ISOWeekNum

Odgovor Napisal/-a bilioldi »

Na datum 31.12.2018 sem po formuli ISOWEEKNUM v koledarskem letu dobil vrednost 01, kar je tudi pravilno, ampak ta teden ISO je že v letu 2019. Ker pa sumiram(SUMIFS funkcija) ure (efektivne, čas za malico, prevozni čas, odsotnost), tudi po koledarskem tednu, so se mi te ure seštele z urami od začetka leta 2018, torej januarja 2018 prvi KT po ISO. S formulo ISOWEEKNUM dobim samo številko KT, ne pa leta( v tem primeru za 31.12.2018) 2019 in seveda sešteje ure v okviru leta 2018 in KT 01, tudi ure tega silvesterskega dneva(31.12.2018), kar ni pravilno za sumiranje po koledarskih tednih. Po logiki bi moral za sumiranje seštevati po dveh kriterijih, KT itak in po letu ampak katerem?
Logično je, da so ure iz 2018 od 01.01.2018 do 31.12.2018, ampak drugi kriterij sume pa je po KT, ki pa gre lahko preko leta.
Posledica tega napačnega seštevka ur v 1 KT je napačen saldo ur na koncu leta 2018. V 1.KT(januar 2018) so ure pravilne + ure od 31.12.2018, ki je tudi KT 01, samo v letu 2019. Torej je saldo ur od prvega tedna do 52-ga napačen. Dobro da imam seštevke po mesecih in z data pickerjem po bilo katerem datumu, ki tudi dela pravilno, samo s KT ne dela (pač leta 2018) pravilno.

Na NET-u sem našel kako se za podatek iz formule ISOWEEKNUM dobi mesec, ne pa kako leto. Pa še vprašanje, če datum 31.12.2018 da številko 01, če lahko dobim še nekako leto 2019, kamor KT spada, kako skup spraviti formulo, s katero bi za KT za leto 2018 dobil pravilen seštevek ur. Se mi zdi, da so ISO KT neka siva cona, samo za določitev začetka in konca ISO tedna, ko pa bi moral narediti seštevek, pa ti sistem na enostaven način nikakor ne omogoča.

Najbrž nimam edini problema s tem, bi pa prosil če je kdo to problematiko na nek način rešil, da mi pomaga. Najbrž bo potrebna pomoč z VBA, samo nimam ideje.
Formula, ki mi sešteva podatke iz KT01 2018 in KT 2019 =SUMIFS(DnevneSume!$X:$X;DnevneSume!B:B;BF4;DnevneSume!$E:$E;BG4)+ SUMIFS(DnevneSume!$U:$U;DnevneSume!B:B;BF4;DnevneSume!$E:$E;BG4)-SUMIFS(DnevneSume!$U:$U;DnevneSume!B:B;BF4;DnevneSume!$E:$E;BG4;DnevneSume!$W:$W;"KU")
KU=koristi ure
B=_Year
E=_Week
U=Ure odsotnost[hh:mm]
X=št ur [hh:mm]

LP
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Prehod leta-problem SUM po ISOWeekNum

Odgovor Napisal/-a admin »

Pozdravljeni,

Glejte; za kaj resnega bi moral natančneje vedeti kaj točno in kako to počnete. Kot vedno je možnih poti do rešitve veliko in zanimivo je kako vam uporabnikom uspe komplicirati stvari.

Vi imate pač težavo, da vam Excel namesto pričakovane vrednosti 53 (53 teden v letu) vrne 1, ker je to tudi hkrati prvi teden naslednjega leta... Brezveze se obremenjujete z ISO standardi in označevanji tednov. Po ISO standardu je to pač prvi teden leta. To se vam bo zgodilo praktično vsako leto, razen v letih, ko 31.12 pade na nedeljo.

In namesto da sedaj izumlajte vročo vodo, ter iščete nove funkcije, komplicirate s seštevki, malce razširite vrednost, ki vam jo funkcija vrne. In sicer na sledeč način:

Če je datum v 12-tem mesecu in funkcija vrne 1 potem vzami številko prejšnjega tedna in ji prištej 1. Torej takole:

Koda: Izberi vse

=IF(AND(MONTH(A1)=12;ISOWEEKNUM(A1)=1);ISOWEEKNUM(A1-7)+1;ISOWEEKNUM(A1))
Ta funkcija vam bo za vsak 31.12 (katerega-koli leta) vrnila "pravo" številko oz. tisto, ki jo vi pričakujete - zadnjo številko leta.

Kar pa se tiče vaših podvprašanj, pa spet ne vem zakaj od funkcije WEEKNUM pričakujete, da bi vam vrnila leto... Saj točno poznate datum - torej datum, ki ste ga dali v funkcijo WEEKNUM... leto iz tega datuma pa dobite preprosto z:

Koda: Izberi vse

=Year(A1)
Ne kompliciratje!
lp,
Matjaž Prtenjak
Administrator
bilioldi
Prispevkov: 10
Pridružen: Ne Apr 10, 2016 11:08 am

Re: Prehod leta-problem SUM po ISOWeekNum

Odgovor Napisal/-a bilioldi »

Hvala vam Matjaž za namig, ko ste napisali formulo.

Problem sem rešil, ko sem napisal novo funkcijo v VBA, ki se pokliče v formulo kot vsaka v Excel 2016.
Naziv sem ji dal ISOYearNumber, vhod je datum, vrne pa ISO Year Number, pač za 31.12.2018 leto 2019.
Testiral sem do leta 2030, pa je leto ISO OK.
Zakaj sem rabil ISO Year? Enako kot fiskalno leto za fakse, kjer se leto začne z začetkom 01.10.YYYY, sem rabil zamik leta po ISO WeekNumber, ki morata sovpadati z ISOJahrNumber,
V VBA sem uporabil Select Case stavek in sem Year (od datuma) prištel +1(KT01) , odštel -1(odvisno od datuma KT52 ali KT53), ali Year prenesel v ISOYearNumber (od KT02 do KT51).

Rabil pa sem kolono z letom(z zamikom, ki je skladen z ISO koledarskim tednom), da lahko sumiram po KT tednih, tudi preko naslednjega ali preteklega leta, pač ISOKT pa koledarsko leto, imata zamik.

Hvala za pomoč, ta funkcija prav gotovo manjka v Excelu 2016, bom pogledal, če jo Excel 2019 že ima.
ISOWeekNum rabi še leto, ki sovpada s tednom, pač 31.12.2018 je ISOWeekNum 01 ISOYearNumber pa 2019.

LP
Odgovori