Ritten plannen in Excel

Voorbeeldbestanden bij dit artikel:
  • Ritten plannen in Excel (nieuwere versie dan de screenshots in dit artikel)
  • Inleiding

    Er bestaat een nuttige app in de strijd tegen voedselverspilling: 'Too good to go', vrij vertaald: etenswaren die nog te goed zijn om in de vuilbak te kieperen. Het is een platform van aangesloten handelaars en consumenten, met een organisatie onder dezelfde naam 'Too good to go' (TGTG vanaf nu). Het principe is dat handelaars die met overschotten van nog eetbaar voedsel zitten, pakketjes kunnen aanbieden via de app. Wie zin heeft kan 1 of meerdere pakketten kopen, gewoonlijk betaalt men tussen 3 en 5 EUR. De waarde van het pakket schommelt rond het twee/drievoudige van dit aankoopbedrag. Heb je geluk en zijn er nog redelijk wat etenswaren over dan kan jouw pakket duidelijk meer waarde bevatten dan initieel vooropgesteld ! Men betaalt op voorhand, echter, men kent (nog) niet de inhoud van het pakket. Daar zit de verrassing, en voor de handelaars is het evenzeer een verrassing: zij weten ook niet op voorhand wat zal over blijven tegen sluitingstijd. Je kiest uiteraard wel de winkel en locatie waar je een pakket koopt, en je weet ook tussen welk begin- en einduur het pakket moet opgehaald worden. Doorgaans zet men de pakketten reeds klaar zodat er maar een minimale wachttijd is bij het ophalen. In de app gaat de ophaler dan ook swipen en bevestigen dat het pakketje opgehaald werd. Er wordt een quotering gegeven in de vorm van sterren (1 tot 5). De voedingswaren zijn nog zeker tot de dag van aankoop goed, en heel vaak gewoon langer. Men kan ook de gekochte producten verwerken, wegschenken of invriezen, bijvoorbeeld, mocht het opeten niet relatief snel kunnen gebeuren. Er zijn winkels in de categorieën "Brood en gebak", "Boodschappen", "Maaltijd". Door corona is het aanbod van dat laatste minder dan zonder corona, maar nog steeds zeker en vast de moeite. Wat dacht je van bloemisten, frituren of de lokale meeneem-Chinees: er doen veel meer handelszaken mee dan we denken.

    Op naar Excel dan... Je bent dus vrij om meerdere pakketjes bij verschillende handelaars op te halen, denk maar aan 2 handelaars waarvan de winkels dicht bij mekaar gelegen zijn. Maar dan zou het wellicht makkelijk zijn om de pakketjes en tijden te kunnen bijhouden. Want kan je het pakketje niet tijdig afhalen, dan is het verloren en belandt het alsnog in de vuilbak (geld wordt niet teruggestort). Hieronder zie je een geografisch overzicht van de ritten die we gebruiken in het Excel oefen- en voorbeeldbestand: je kan dat downloaden bovenaan de pagina.

    Noot: lees zeker heel het artikel door, aangezien er in het Excel bestand meer geavanceerde zaken zitten die ik meer naar het einde van het artikel toe zal bespreken.

    In tekst gegoten wordt het dit:

    1. Rijd van thuis naar...
    2. ... les tartes de Françoise in Mechelen (mmmm !), dan naar...
    3. ... Carrefour Express in Sint-Katelijne-Waver, vervolgens...
    4. ... naar Colruyt Mechelen, voor andere boodschappen (niet-TGTG gerelateerd), en tot slot...
    5. ... terug naar huis

    Nu, we moeten bepaalde tijden respecteren. De 2 pakketjes van TGTG hebben een startuur en een einduur, waarbinnen je ze moet afhalen. Andere supermarkten zoals Colruyt zijn uiteraard ook niet de ganse dag open, het sluitingsuur van 19u50 wordt best gerespecteerd. Gieten we dit in een Excel bestandje, dan kunnen/moeten we met tijden gaan rekenen. We gaan er wel van uit dat tijden binnen dezelfde dag / etmaal blijven en niet middernacht overschrijden.

    We zien de verschillende locaties (de rijen met de oneven nummers) en ritten (de rijen met de even nummers). De gele velden zijn invoer door de gebruiker: ik heb daar de Excel Stijl 'Invoer' gebruikt die automatisch reeds in Excel voorgedefinieerd zit:

    De invoer in de gele cellen gaat over 3 soorten invoer:

    • Tijden (gemeten in uren en minuten)
    • Afstanden (gemeten in km)
    • Rijtijden (gemeten in min)

    Tijden geef je in door het uur te typen, gevolgd door het een dubbelepunt (:), gevolgd door de minuten. Als het goed is zal Excel zelf de invoer beschouwen als een tijdstip (dagdeel). Een tip: als er geen minuten zijn (zoals 15:00 voor 15u), dan kan je dat gewoon intypen als 15 en dubbelepunt. De 0 (of zelfs 00) van de minuten hoef je niet in te geven. Een rittijd van 5 minuten geef je in als 0:05. Dit doe je in kolom G voor elk van de ritten. Met een aantal formules berekenen we o.a. de tijd van aankomst: dat is de vertrektijd bij de vorige locatie, plus de rittijd. Bekijk zeker eens die formule, aangezien ik er een trucje toepas: als we rijen gaan verwijderen omdat we minder tussenstops hebben, dan kan het zijn dat de formule breekt (met een #VERWijzingsfout). Daarom bepaal ik de rittijd naar een bepaalde bestemming op een alternatieve manier, die niet breekt wanneer we rijen verwijderen. Ik doe dat met de functies van INDIRECT, ADRES, RIJ en KOLOM. Onderaan zien we dan hoe lang we onderweg waren, hoeveel tijd we aan ritten gespendeerd hebben, en hoeveel kilometer er afgelegd werd.

    So far so good. In kolommen J en K kan je aangeven tussen welke begin- en eindtijd je verwacht wordt op de locaties. De kolommen heten "Ondergrens" en "Bovengrens". Zeker TGTG pakketjes hebben dat, en winkels in het algemeen ook. Je ziet het niet op het eerste zicht wanneer alle input "goed" is, maar ik heb voorwaardelijke opmaak gebruikt: stel dat er door rittijden en/of tijd op de locatie een situatie ontstaat dat je niet kan voldoen aan een begin- of eindtijd, dan wordt dat duidelijk aangegeven:

    We zijn te laat vertrokken en komen niet tijdig aan bij locatie 1 ! Het pakketje kan niet meer afgehaald worden. De naam "Les tartes de Françoise" wordt in rood weergegeven.

    Voor die voorwaardelijke opmaak zijn er wel enkele formules nodig. Bekijk ze gerust in de verborgen kolommen. Het mooiste van het bestand is echter, volgens mij, de visuele voorstelling in kolom S. Hier toon ik het 'tijdswindow' bij de locatie: zo is er telkens 1 uur op locatie 1 en locatie 2. Elk vierkantje (leeg of gevuld) stelt een blok van 2 minuten voor. We hebben aldus 30 blokjes. Een gevuld blokje betekent dat je in de winkel / op de locatie bent. Een leeg blokje betekent uiteraard dat je er niet bent. Zo merken we in 1 oogopslag dat we bij locatie 1 nogal laat zijn (maar nog wel op tijd) en dat we bij locatie 2 ruimschoots goed zitten: mooi tijdens het eerste gedeelte van ons beschikbaar window. De blokjes worden gegenereerd door de HERHALING functie in te zetten.

    Tot slot vermeld ik nog een extraatje: met een minimum aan VBA-code zou je een macro kunnen schrijven die bvb. telkens (bij elke uitvoering) 1 minuut aftrekt van de geselecteerde cellen (voor invoer). Dat verlicht het manuele werk en werkt sneller bij het (lichtjes) aanpassen van de plannen. Bijvoorbeeld:

    Sub Trek_1_minuut_af()
    Dim r As Range On Error Resume Next For Each r In Selection.Cells If r.Style = "Invoer" Then r.Value = r.Value - 1 / 24 / 60 End If Next On Error GoTo 0
    End Sub

    Net zo makkelijk past u dit aan om 1 minuut (of een andere tijdseenheid) bij te tellen. Wat is die 1 / 24 / 60 zal u zich misschien afvragen ? Wel, dat is mijn notatie voor 1 minuut. Een dag is 1, dus 1/24 is een uur. Delen we nog een keer door 60 dan hebben we een minuut. Er zijn alternatieve schrijfwijzen maar ik verkies zelf deze.

    Zo, met deze technieken komt u nooit meer te laat ! Of heeft u alleszins geen uitvlucht meer ;-)




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links