Nerd-alert! Regelmatig schrijf ik hier over mijn spreadsheets, onlangs publiceerde ik nog een nieuwe versie. Een beetje een uit de hand gelopen hobby. Hield ik eerst eenvoudigweg mijn uitgaven en mijn beleggingen bij, in de loop van de jaren is vrijwel al het handwerk weg geautomatiseerd. Rapportjes downloaden bij mijn bank en mijn aandelenbroker, op de knop drukken, en alles is weer bijgewerkt.

De spreadsheets zijn af?

Een paar jaar geleden dacht ik dan ook dat ze wel klaar waren, die spreadsheets. Maar niets is minder waar. Ik blijf dingen bijbouwen. Maar het karakter van de nieuwe bouwsels is wel veranderd. Steeds vaker gaat het om rapportjes en grafieken. Dingen die inzichtelijk maken hoe mijn financiële situatie zich ontwikkelt.

Zo heb ik inmiddels een collectie van bijna 50 verschillende grafieken verzameld, verdeeld over mijn verschillende spreadsheets. En daar was iets mee. Ik heb er nooit rekening mee gehouden dat de collectie zo groot zou worden. En de programmacode was dus een beetje inefficiënt. En zo rommelig dat ik er zelf geen wijs meer uit werd. De eerste grafieken waren bij elkaar geknipt en geplakt, omdat ik destijds zelf nog niet zo goed begreep hoe Excel die grafieken nou opbouwde. Inmiddels begrijp ik dat een stuk beter. Het werd er ook allemaal een beetje traag van. En ze zagen er allemaal net iets anders uit, er was geen consistente ‘huisstijl’ en kleurstelling, met allerlei kleine inconsistenties en onvolkomenheden. Het was dus eigenlijk gewoon tijd voor een grote verbouwing. Maar een grote verbouwing is ook een tijdrovende verbouwing. En daar zag ik een beetje tegenop.

En toen kwam de Corona-tijd. Ik weet niet hoe het jullie vergaat, maar na een week of 10 aan thuisquarantaine was ik wel even uitgelezen en snakte ik naar iets anders. En waren er een paar extralange weekenden. Waarin we niet echt weg konden / mochten. Een prima moment voor een extralange programmeerklus dus. Tijd voor de grote grafiekenschoonmaak…

Eerst denken dan bouwen

Voordat ik begon heb ik een analyse gemaakt van al mijn grafieken. Uiteraard in een grote spreadsheet. De naam, het soort grafiek, waar komt de data vandaan, hoe wordt de y-as samengesteld, wat zijn de dataseries, kenmerken als kleuren en lijndiktes, de berekeningen van minimum en maximumwaarden op de Y-as, de kenmerken van de assen, datalabels, dat soort dingen. In totaal 214 kenmerken per grafiek.

Gaande die analyse ontstond er een beeld. Ik heb zoveel mogelijk kenmerken verzameld die uniform waren (of dat zouden moeten zijn). Hoe de assen ingericht waren, en de ‘gridlines’ (de horizontale hulplijnen) in de grafiek. Maar ook het lettertype, en de lettergrootte en andere kenmerken van de astitels en eventuele legenda’s. Noem het maar de ‘huisstijl van mijn grafieken’. En daarmee ontstond er een nieuwe opzet voor de manier waarop ik grafieken programmeer. Niet meer met één heel grote en onoverzichtelijke routine, maar in brokken. Daar wordt het overzichtelijker van, en sneller.

Al mijn spreadsheet hebben een grafiekenpagina. Daar heb je een aantal keuzemogelijkheden. Je kunt bijvoorbeeld uit een lijstje de grafiek kiezen die je wilt zien. En bijvoorbeeld een periode kiezen of een begin- en einddatum instellen. Als ik dat doe en nu op mijn grafiekenpagina op de ‘Charts’ knop druk, dan wordt er eerst een Centrale Grafieken procedure aangeroepen. Die zorgt ervoor dat de gemaakte keuzes verwerkt worden, zo wordt bijvoorbeeld het begin- en eindpunt van de X-as berekend. Ook wordt de oude grafiek op de grafiekenpagina weggegooid en vervangen door een nieuwe, lege grafiek met alle uniforme stijlkenmerken. Vervolgens worden specifieke variabelen voor de grafiek verzameld, die her en der in de spreadsheets staan. En tenslotte wordt er een specifieke Grafiekprocedure aangeroepen, met alle variabelen.

Ook in die specifieke Grafiekprocedure vinden weer een aantal stappen plaats. De procedure begint met het instellen van een aantal specifieke parameters voor die grafiek. Het soort grafiek bijvoorbeeld, de titels, dat soort dingen. Daarna worden de X-as en de verschillende dataseries samengesteld. Als derde worden die dataseries in de grafiek geplaatst en krijgen ze hun kenmerken mee, zoals kleur. En tenslotte worden (indien nodig) datalabels aan de series toegevoegd. En voila, er staat een grafiek op mijn scherm. In een fractie van een seconde. Schematisch is het weergegeven in onderstaande figuur.

De Vermogens-Waterval

Een dag of drie programmeerwerk. Daarmee had ik alle 48 grafieken in mijn vier spreadsheets (administratie, beleggingen, hypotheek en dashboard) in deze nieuwe structuur gegoten. Ik ben er erg blij mee. Maar daarmee was ik er nog niet. Er stond namelijk al heeeeeel lang een specifieke grafiek op mijn wensenlijstje.

Deze.

Handmatig gegenereerd met de standaard waterval-grafiek in Excel

Een watervalgrafiek die me per kwartaal laat zien hoe de verschillende onderdelen van mijn vermogen veranderd zijn. Groen als er een stijging is, rood als er een daling is. En aan het eind een kolom die de netto stijging (of daling, dat komt ook voor) voor dat specifieke kwartaal laat zien. De brongegevens hiervoor zitten al jaren in mijn Dashboard-spreadsheet.

Sinds Office 2016 zit er standaard een watervalgrafiek in Excel, maar ik heb nog geen enkele manier gevonden om die rechtstreeks aan te spreken in Visual Basic. De macro-recorder laat me hier in de steek. Op de diverse fora waar ik de oplossingen voor mijn programmeerprobleempjes zoek las ik dat ze inderdaad (nog) geen onderdeel van het objectmodel van Excel zijn, en dat ze dus niet te programmeren zijn. De versie van het eerste kwartaal was dus handmatig samengesteld.

Maar ik vond ook deze beschrijving. Die een waterval stapsgewijs opbouwt met de hulp van een tijdelijke dataset en een standaard kolommengrafiek. Die ik allebei wel helemaal kan programmeren. En ik houd wel van een uitdaging. Dus ik ben aan de slag gegaan. Het kostte me anderhalve dag. Maar het is me gelukt. Met één druk op de knop verschijnt er nu mijn eigen geautomatiseerde waterval. Jij zult denken ‘boeiuh’, maar ik kan echt genieten van dit soort dingen!

Hetzelfde als de vorige, maar helemaal geautomatiseerd samengesteld

De Anonimiser

Veel grafieken gebruik ik ook hier op mijn blog. Maar ik wil niet altijd mijn cijfers delen. In het verleden bewerkte ik die grafieken dan met het grafisch bewerkingsprogramma GIMP zodat de cijfers onzichtbaar werden. Maar ook dat is nu volledig geautomatiseerd. Mijn grafiekenpagina’s hebben nu allemaal een Anonimiseer-knop. Die verbergt de bedragen met één druk op de knop (en laat ze met een nieuwe druk op de knop ook weer verschijnen). Het werkt voor bedragen op de Y-assen en verbergt ook datalabels. Alleen als het bedragen zijn, percentages mogen blijven staan. Daarna kan ik de grafiek meteen op mijn blog gebruiken. Ook hier dus geen handwerk meer.

De 48 grafieken

En nu zijn er dus 48 grafieken. Inmiddels al 49 met die waterval. Ook dat is een tussenstand, want ik heb nog wel wat meer ideetjes. Die ik in mijn nieuwe structuur makkelijker uit kan werken, dat dan weer wel. In de onlangs vernieuwde versie van de Financiële Administratie op mijn Downloads-pagina kun je zien hoe de grafieken en de Visual Basic programmacode eruit zien. En hieronder een bloemlezing van mijn vernieuwde grafieken… Allemaal één druk op de knop.

Bijt jij je ook wel eens helemaal vast in een volkomen nutteloos onderwerp?