< návrat zpět

MS Excel


Téma: Dopočet dat. a času se zohledněním pracovní doby rss

Zaslal/a 1.3.2018 11:43

Prosím můžete mne někdo nasměrovat, jak byste řešili následující problém:
1) Mám hodnotu začátku (Datum a čas) a to jak separátně ve dvou buňkách tak spojené v jedné buňce. V mém případě se jedná o datum a čas identifikace incidentu
2) Dále mám počet hodin, kdy má být incident o identifikace odstraněn. Tento čas se mění pro různé druhy incidentů.
3) na základě těchto dvou hodnot chci dopočítat datum a čas, kdy má být incident vyřešen.
- dopočítání prostého datumu a času není problém
- já však musím zohlednit pracovní dobu (např. od 8:00 do 16:00) tzn. pokud byl incident nalezen např. v 14:00 a pracovní doba končí v 16:00 a doba, do které má být incident uzavřen je 8 hodin. Pak potřebuji dopočítat 2 hod. z 1. dne a 6 hod. z druhého dne tzn. výsledek, ke kterému potřebuji nějak elegantně dojít je následující den ve 14:00.

Incidentů jsou stovky a počet hodin k vyřešení se pohybuje od 3 hod. do 24 hodin.

Ps víte jak na to?
Díky

Zaslat odpověď >

#039717
avatar
Pár otázek:
Pracovní doba je jen po - pá nebo se jedná o nepřetržitý provoz po - ne?

Je to jen drobnost, ale odpadl by test na kontrolu jestli je pátek a další pracovní den je až v pondělí.
A co svátky, pracuje se nebo ne?citovat
#039718
avatar

Jiří497 napsal/a:

Pár otázek:
Pracovní doba je jen po - pá nebo se jedná o nepřetržitý provoz po - ne?

Je to jen drobnost, ale odpadl by test na kontrolu jestli je pátek a další pracovní den je až v pondělí.
A co svátky, pracuje se nebo ne?


Děkuji Jiří497 za doplňující dotaz to jsem zapomněl napsat:
- pracovní dobe je pouze pracovní dny tzn. po - pá
- víkendy a svátky potřebuji vynechat nejsou v pracovní doběcitovat
#039731
avatar
Tak jsem se na to díval a něco jsem stvořil. Není to dokonalé, je potřeba dořešit kontroly, určitě by to šlo i lépe učesat....

Načítá to natvrdo z konkrétních buněk, nevím jak to máš ty.

Čas na vyřešení incidentu běží jen v pracovní době a v pracovní dny?
Nejdelší čas na řešení incidentu je 23:59:59
Nevím, kdy se má čas vypočítat, zatím je to na tlačítko.

Třeba to k něčemu bude
Příloha: zip39731_vypocet-casu.zip (20kB, staženo 37x)
citovat
#039733
avatar
Když už jsem to stvořil, zajímal by mě názor odborníků na pár věcí:

konstanta PrcDob1 = "8:00:00" - šla by nastavit přímo jako číslo, aby se později nemusela převádět pomocí TimeValue.

Lze lépe vyřešit kontrolu svátků (procházení polem)?

Díkycitovat
#039734
avatar
@ Jiří 497
Malá otázka. Riešiš svoj problém alebo problém Olama? Olam to má zrejme už vyriešené, keďže už k tomu nič relevantné nenapísal.

V stlpci F treba doplniť sviatky a samozrejme aj vzorec upraviť.
Příloha: xlsx39734_vypocet-casu.xlsx (12kB, staženo 30x)
citovat
#039737
avatar
No, zaujal mě ten problém, který tu Olam donesl, tak jsem si to chtěl vyzkoušet.

Nenapadlo mě, že existuje nějaký WORKDAY, tak jsem na to šel přes makro.
A teď by mě spíš v obecné rovině zajímalo, jestli je takovýto zápis konstanty Const PrcDob1 = "8:00:00" dobrý nebo jestli by to šlo i jinak, lépe (neberu v úvahu možnost načtení z listu).

Stejně tak i tento způsob naplnění pole datumy:

Dim svatky(7) As Long
svatky(0) = DateSerial(Year(Date), 1, 1)
svatky(1) = DateSerial(Year(Date), 3, 30)
svatky(2) = DateSerial(Year(Date), 4, 2)
svatky(3) = DateSerial(Year(Date), 5, 1)

je to takto vhodné nebo je lepší to udělat jinak (opět nechci načítat z listu, chci to mít natvrdo zadané)

a nebo toto naplnění času pomocí timevalue
Select Case Range("B4").Value
Case 1
CasNaReseni = TimeValue("2:00:00")
Case 2
CasNaReseni = TimeValue("11:00:00")

Momentálně to k ničemu konkrétnímu nepotřebuji, jen by mě zajímalo, jestli se v makrech takhle s datumem a časem pracuje.

Doufám, že chápeš o co mi jde. Líp to popsat neumím.

Studoval jsem ten tvůj výtvor a klobouk dolů. I kdybych tu funkci znal, stejně bych skončil na tom, jak určit začátek a konec pracovní doby. Tohle bych zřejmě nevymyslel.citovat
#039739
elninoslov
Pracovnú dobu môžete do konštanty zapísať ako Date:
Const PracDob1 = #8:00:00 AM#
alebo ako Double :
Const PracDob2 = 1 / 3

Sviatky môžete do poľa zadať :
Dim Svatky(), Rok As Long
Rok = Year(Date)
Svatky = Array(DateSerial(Rok, 1, 1), CDate(Evaluate("=(DOLLAR((""4/""&" & Rok & ")/7+MOD(19*MOD(" & Rok & ",19)-7,30)*14%,)*7-6)+1")), DateSerial(Rok, 5, 1), DateSerial(Rok, 5, 8), DateSerial(Rok, 7, 5), DateSerial(Rok, 7, 6), DateSerial(Rok, 9, 28), DateSerial(Rok, 10, 28), DateSerial(Rok, 11, 17), DateSerial(Rok, 12, 24), DateSerial(Rok, 12, 25), DateSerial(Rok, 12, 26))

ale ako pozerám na tému, tak na koniec ešte pridajte 1.1.Rok+1, ak by náhodou incident nastal na konci roka, treba počítať aj so sviatkom 1.1. následujúceho roku.

Detto by som doplnil aj pre ten vzorec od marjankaj. Označiť E4, vytvoriť Definovaný názov SVATKY:
=DATEVALUE(MID(SUBSTITUTE("01.01.XXXX"&TEXT((DOLLAR(("4/"&YEAR(List1!$C4))/7+MOD(19*MOD(YEAR(List1!$C4);19)-7;30)*14%;)*7-6)+1;"dd.mm.")&"XXXX01.05.XXXX08.05.XXXX05.07.XXXX06.07.XXXX28.09.XXXX28.10.XXXX17.11.XXXX24.12.XXXX25.12.XXXX26.12.XXXX01.01."&YEAR(List1!$C4+1);"XXXX";YEAR(List1!$C4));{1;11;21;31;41;51;61;71;81;91;101;111;121};10))
=DATUMHODN(ČÁST(DOSADIT("01.01.XXXX"&HODNOTA.NA.TEXT((KČ(("4/"&ROK(List1!$C4))/7+MOD(19*MOD(ROK(List1!$C4);19)-7;30)*14%;)*7-6)+1;"dd.mm.")&"XXXX01.05.XXXX08.05.XXXX05.07.XXXX06.07.XXXX28.09.XXXX28.10.XXXX17.11.XXXX24.12.XXXX25.12.XXXX26.12.XXXX01.01."&ROK(List1!$C4+1);"XXXX";ROK(List1!$C4));{1;11;21;31;41;51;61;71;81;91;101;111;121};10))

,ktorý bude počítaný automaticky pre každý riadok, teda incidenty môžu byť v rôznych rokoch. Inak by sa totiž pre predmetné roky museli robiť vždy samostatné stĺpce s dátumami pre daný rok.

A ten marjankaj-ov vzorec iba doplniť o tie počítané sviatky, čiže:
=WORKDAY(C4;INT((B4+D4*24)/8)-1;SVATKY)+MOD(B4+D4*24;8)/24+1/3
=WORKDAY(C4;CELÁ.ČÁST((B4+D4*24)/8)-1;SVATKY)+MOD(B4+D4*24;8)/24+1/3
citovat
#039740
avatar
Díky, to jsem měl na mysli.

Já jsem při plnění pole počítal rok u každého prvku a přitom to stačí vypočítat jen jednou předem a ušetřit čas. Tady asi ne, ale jinde při větším množství.

čas jako double:
8:00 = 1/3
9:00 = 1/3+1/24 = 9/24
9:30 = 9/24+1/48

Už vidím, jak si napíšu místo 9:15
Const JdiNaSvacinu = 9/24+15/1440
Const JdiNaPivo = 1/3+1/24+15/1440
a pak za rok budu na to hledět, co to má být 5citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse