Excel: positieve waardes doorschuiven naar negatieve cellen

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 23:55

g0tanks

Moderator CSA
Topicstarter
In een Excel bereken ik de uren waarmee ik drie verschillende diensten (Shift 1 t/m 3) kan vullen. Shift 1 heeft vaak uren over die ik ook kan inzetten voor Shift 2 en 3. In een oogopslag is vaak te zien of dat past, maar ik wil die excercitie automatiseren.

Een randvoorwaarde is dat Shift 1 minder waard is dan Shift 2 en 3 met een factor 2. Met andere woorden: 1 uur doorschuiven van Shift 1 levert maar 0,5 uur op in Shift 2 of 3. Een aantal voorbeelden ter illustratie:

Voorbeeld 1: Uit de eerste berekening komt dat Shift 1 +30 uren over heeft en Shift 2 en 3 resp. -10 en -5 te kort komen (B4 t/m D4). Met een factor 2 (in D1) heeft Shift 1 precies genoeg om Shift 2 en Shift 3 te vullen. Regel 5 bevat hulpcellen en geven de delta's aan door verschuiving. Het resultaat (B6 t/m D6) is netto nul.
Afbeeldingslocatie: https://tweakers.net/i/MBNHWGBNYQ5dDBLc7KiedJ1XdV8=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/kHK0lToL6vfB3yfa5Sa63KUu.png?f=user_large

Voorbeeld 2: Als Shift 1 maar +10 uren over heeft is dat slechts voldoende om een deel van Shift 2 te vullen.
Afbeeldingslocatie: https://tweakers.net/i/6MW5ZDmuq_ZYlIg93vHspk4mSxg=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/kXKomEG9lqdfQnoWBzXs3gZe.png?f=user_large

Voorbeeld 3: Maar stel de factor wordt 0,10 dan past het makkelijk en houden we over.
Afbeeldingslocatie: https://tweakers.net/i/rP8LwmQ4uEWSQlF6KQQgmVc3usI=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/8Wg81Fx1iug0sZ0nf8ixfTgj.png?f=user_large

Voorbeeld 4: Of als Shift 2 ook ineens +10 over heeft past het.
Afbeeldingslocatie: https://tweakers.net/i/PGh55yTwMO0ahbrX8qo9j18SXTA=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/nR3qUbXCSBL0qmtQ1v9FEz6C.png?f=user_large

Ik heb dit nu opgelost met in C5 de formule:
code:
1
=IF(AND(B4>0;C4<0);IF(ABS(C4)<B4/D1;C4;-B4/D1);0)

En in D5:
code:
1
=IF(D4<0;IF(IF(B4/D1+C5>0;(B4/D1+C5)*-1;0)<D4;D4;IF(B4/D1+C5>0;(B4/D1+C5)*-1;0));0)


Dat werkt prima, maar is verre van elegant en is niet makkelijk uit te breiden voor extra shifts. Mijn vraag is of jullie nog creatieve oplossingen weten, los van VBA gebruiken. Ik zit er te dicht op en kan wel een frisse blik gebruiken. :p

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW

Beste antwoord (via g0tanks op 21-10-2020 22:55)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zoiets:
Afbeeldingslocatie: https://tweakers.net/i/1buQgyWIdQJj-6uOyvrAsbCtP8g=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/CgpzZaDLH3hj8fdfGlEW07yq.png?f=user_large

Je kunt de formules gewoon doortrekken naar een onbeperkt aantal shifts, en per shift aangeven wat de omrekenfactor is. Voor de duidelijkheid heb ik wat rijen (5 t/m 7) toegevoegd, maar die kun je gewoon weglaten. Het idee is dat je iedere shift eerst terug rekent naar 'standaarduren. Iedere shift kan uren 'opnemen uit' een bufferpotje, het lopend totaal. De berekening daarvoor is (bv C3: =MAX(0;MIN(B8;-1*C2*C3)). De rest is simpelweg optellen en aftrekken.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Alle reacties


Acties:
  • 0 Henk 'm!

  • siddler
  • Registratie: April 2006
  • Laatst online: 01-10 14:14
Wat zijn je eisen aan het uitbreidbaar maken? Gaan er alleen uren van shift 1 naar shift x overgeboekt worden? Of wil je de flexibiliteit om bijv van shift 3 naar shift 1 over te boeken?
En maakt het uit of je alle shifts gedeeltelijk oplost of dat je een aantal shifts helemaal oplost en de rest helemaal niet?

Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 23:55

g0tanks

Moderator CSA
Topicstarter
siddler schreef op maandag 12 oktober 2020 @ 23:10:
Wat zijn je eisen aan het uitbreidbaar maken? Gaan er alleen uren van shift 1 naar shift x overgeboekt worden? Of wil je de flexibiliteit om bijv van shift 3 naar shift 1 over te boeken?
En maakt het uit of je alle shifts gedeeltelijk oplost of dat je een aantal shifts helemaal oplost en de rest helemaal niet?
In principe is de logica: als shift 1 over heeft, dan verschuiven naar eerstvolgende shift die te kort komt (2 of 3). In 95% van de gevallen zal het niet voorkomen dat shift 1 te kort komt en juist 2 of 3 over hebben, dus andere richtingen hoeven van mij niet meegenomen te worden (bijv. 2 naar 3 of 3 naar 1).

Makkelijk een extra shift toevoegen door de formule door te trekken zou leuk zijn, maar is ook geen vereiste.

[ Voor 7% gewijzigd door g0tanks op 12-10-2020 23:16 ]

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Er staat me iets bij van een topic over belastingverrekening wat qua probleem hier wel op lijkt. Effe zoeken. ;)

Gevonden: Lustucru in "Excel tabel verrekenbare verliezen" dit werd interessant door een beperking van 9 jaar, maar dat is bij jou niet van toepassing. Een lopend totaal rij dus. :)

[ Voor 48% gewijzigd door Lustucru op 12-10-2020 23:44 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zoiets:
Afbeeldingslocatie: https://tweakers.net/i/1buQgyWIdQJj-6uOyvrAsbCtP8g=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/CgpzZaDLH3hj8fdfGlEW07yq.png?f=user_large

Je kunt de formules gewoon doortrekken naar een onbeperkt aantal shifts, en per shift aangeven wat de omrekenfactor is. Voor de duidelijkheid heb ik wat rijen (5 t/m 7) toegevoegd, maar die kun je gewoon weglaten. Het idee is dat je iedere shift eerst terug rekent naar 'standaarduren. Iedere shift kan uren 'opnemen uit' een bufferpotje, het lopend totaal. De berekening daarvoor is (bv C3: =MAX(0;MIN(B8;-1*C2*C3)). De rest is simpelweg optellen en aftrekken.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 23:55

g0tanks

Moderator CSA
Topicstarter
Excuus voor de late reactie. Ik kom er nu pas aan toe om er weer naar te kijken.

De oplossing van @Lustucru werkt goed, ook bij het toevoegen van shifts. Dank voor het meedenken!

Afbeeldingslocatie: https://i.imgur.com/VjbrmZg.png

[ Voor 3% gewijzigd door g0tanks op 21-10-2020 22:58 ]

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW

Pagina: 1