< návrat zpět
MS Excel
Téma: VBA výpočet práce v noci
Zaslal/a adosl 17.6.2014 16:45
Ahoj potřeboval bych poradit. Rád bych vytvořil pomocí VBA funkci, která mi vypočítá kolik hodin člověk odpracoval v noci, pokud budu brát noc od 22:00 do 6:00. Mám vzoreček ale nevím jak nahradit FUNKCE MIN A MAX, které nejdou použít ve VBA. Pokud by to někdo už měl udělané čistě jen za pomocí VBA, byl bych rád kdyby se podělil. Jo a nechci to řešit pomocí vložit vzorec. VBA funkce by měla brát dva parametry jako A1 začátek práce B1 konec práce.
vzorec je:
=KDYŽ(A($D18<>"";NEBO($D18<0,25;$E18>0,92));MAX(MIN(KDYŽ($E18<$D18;1;$E18);0,25)-MAX($D18;0);0)+MAX(MIN(KDYŽ($E18<$D18;1;$E18);1)-MAX($D18;0,916666666666667);0)+MAX(MIN(KDYŽ($E18<$D18;$E18;0);0,25);0)+MAX(MIN(KDYŽ($E18<$D18;$E18;0);1)-0,916666666666667;0);"")
Příklad:
A1 = 0:00 B1 = 23:00 v C1 bude výsledek 7:00.
Všem díky za nápady.
AL(17.6.2014 17:03)#020017 ...FUNKCE MIN A MAX, které nejdou použít ve VBA
Prečo by nešli?
citovat
adosl(19.6.2014 23:59)#020057 AL napsal/a:
...FUNKCE MIN A MAX, které nejdou použít ve VBA
Prečo by nešli?
Vytvořil jsem si jednoduchou funkci a v ní se snažil použít funkci MAX a vyhodilo mi to chybu, že nezná funkci MAX tak proto. Můžeš mi sem teda hodit příklad vlastní VBA funkce ve které použiješ funkci MAX nebo MIN?
citovat
Pavlus(20.6.2014 2:03)#020058 Zřejmě je jenom špatně voláš...
P.
Př.:Application.WorksheetFunction.Min(myRange)
Application.WorksheetFunction.Max(myRange)citovat
adosl(22.6.2014 14:41)#020070 Pavlus napsal/a:
Zřejmě je jenom špatně voláš...
P.
Př.:Application.WorksheetFunction.Min(myRange)
Application.WorksheetFunction.Max(myRange)
Pořád mi to nějak nejde. Může mi teda někdo poslat jak zapsat toto:
MAX(MIN(KDYŽ($E17<$D17;1;$E17);0,25)-MAX($D17;0);0)
všem díky za radu. :)
citovat
kp57(22.6.2014 20:42)#020071 Zápis toho tvého vzorce by mohl vypadat nějak takto:
Range("C1") = WorksheetFunction.Max(WorksheetFunction.Min(IIf(Range("B1") < Range("A1"), 1, Range("B1")), 0.25) - WorksheetFunction.Max(Range("A1"), 0), 0)
Ale vzhledem k tomu, že není funkční mohl bys použít např. v Modulu tuto Funkci:
Function NOCNI(nDatA As Double, nDatB As Double)
Dim nCasA As Double, nCasB As Double
nDatA = nDatA + 1 / 12
nCasA = ((nDatA + (nDatA > 1)) < 1 / 3) * -(nDatA + (nDatA > 1))
If nCasA > 0 Then nCasA = 1 / 3 - nCasA
nDatB = nDatB + 1 / 12
nCasB = ((nDatB + (nDatB > 1)) < 1 / 3) * -(nDatB + (nDatB > 1))
NOCNI = Abs(nCasA + nCasB)
End Function
Do Tab si dej vzorec:
=KDYŽ(A(JE.ČISLO(RC1);JE.ČISLO(RC2));NOCNI(RC1;RC2);"")
citovat
adosl(22.6.2014 22:30)#020072 Díky kp57 ta funkce NOCNI funguje dokonale. To je přesně co jsem potřeboval.
Díky moc a snad to pomůže i ostatním kdo to budou potřebovat.
citovat