Programmeren in LibreOffice is anders dan in Excel

Het afgelopen jaar is er veel veranderd in mijn financiële systeem. Ik heb afscheid genomen van mijn oude trouwe Excel-spreadsheets. Zij hebben mijn financiën voor mij bijgehouden sinds 2003. Maar het was tijd voor verandering. Het was tijd voor open-source software, met meer aandacht voor privacy en veiligheid in deze barre tijden waarin de kunstmatige intelligentie onze wereld definitief in de afgrond zal kieperen en de mensheid zal vernietigen…

Sinds 2015 werkte ik in mijn Excel-spreadsheets met macro’s. Die zorgen ervoor dat het bijhouden van mijn financiën grotendeels geautomatiseerd gebeurde. Zo min mogelijk menselijke handelingen. Bij de overstap naar LibreOffice wilde ik er uiteraard niet op achteruit gaan. Ik wilde de functionaliteit van mijn macro’s gewoon meenemen.

Het ene BASIC is het andere niet

En dat gaat zo maar niet. Microsoft gebruikt Visual Basic for Applications, VBA. En in LibreOffice kun je kiezen. Er is LibreOffice Basic, gebaseerd op StarBasic, een robuuste (lees: oude) BASIC-variant. En je kunt ook gebruikmaken van modernere talen als Python en JavaScript.

Er zit ook een optie in LibreOffice voor het draaien van VBA-code. Die is de afgelopen jaren fors verbeterd, maar werkte niet met het merendeel van mijn code. Bovendien wilde ik niet alleen van Excel af, ik wilde ook af van het gesloten Excel-bestandsformaat. Ik wilde overstappen naar het Open Document Format. Dus geen Excelbestanden draaien in een LibreOffice omgeving.

Lang heb ik overwogen om Python te gaan gebruiken. Ik was me zelfs al aan het verdiepen in deze programmeertaal. Maar uiteindelijk heb ik toch besloten om dat niet te doen. Ik ben ‘gewoon’ met StarBasic aan de slag gegaan. De voornaamste reden hiervoor is simpel. Ik wil graag dat mijn spreadsheets werken in een standaardinstallatie van LibreOffice, zonder dat ik nog apart software moet installeren om een extra programmeertaal te ondersteunen. Met StarBasic is dat het geval.

Ik heb er voor gekozen om de spreadsheets (voor zover ze niet vervangen werden door GnuCash) vanaf nul opnieuw op te bouwen. De relevante data is uiteraard wel gekopieerd naar de nieuwe spreadsheet, maar de macro’s en rapportages zijn volledig opnieuw opgebouwd. Geen sporen uit Excel…

Visual Basic (VBA) versus StarBasic

Basic is Basic, zou je denken. Maar dat is toch echt niet het geval. Het is meteen duidelijk dat de logica hetzelfde is, maar de syntax is behoorlijk anders. Een simpel voorbeel: in Excel roep je een cel aan met (rij, kolom). In LibreOffice (je raadt het al) is dat (kolom, rij). En Excel begint te tellen bij 1, LibreOffice begint bij 0. StarBasic is wat meer ‘basic’ dan het meer ‘gepolijste’ en doorontwikkelde VBA. Het is ook authentieker. Meer object-georiënteerd. Eigenlijk bevalt het mij wel.

Met de hulp van documentatie en DuckDuckGo had ik de belangrijkste verschillen snel onder de knie. Het scheelde natuurlijk dat ik de logica van mijn oude macro’s kon hergebruiken. Ik weet welke stappen ik in elk macro moet zetten om tot het gewenste eindresultaat te komen. Zo heb ik bijvoorbeeld de logica van mijn grafieken-module hergebruikt. Eén algemene macro die de standaardgrafiek helemaal voorbereidt, en daarna een aparte macro voor de data en de specifieke wijzigingen per grafiek. Die maakt het ten eerste makkelijker om een consistente stijl te bewaken / aan te passen en, ten tweede, het scheelt een hoop programmeerwerk.

Het belangrijkste verschil: je merkt dat de gebruikersgemeenschap van LibreOffice en OpenOffice toch wat kleiner en zelfredzamer is dan de Excel-gemeenschap. Er zijn online dan ook minder documentatie en programmeervoorbeelden te vinden. Je moet dus echt meer experimenteren en zelf uitvinden. Gelukkig vind ik dat soort ‘puzzelen’ juist wel fijn.

En tegelijkertijd kun je ook met LibreOffice en StarBasic alles doen. Er is letterlijk nog geen enkele functionaliteit geweest die ik niet kon herbouwen. Daar ga ik nog wel tegenaan lopen, maar dat is geen beperking van Basic. Excel kent natuurlijk de online aandelenfuncties waarmee ik bijvoorbeeld de koersinformatie in mijn spreadsheet bijwerk. Dat soort functies heeft LibreOffice natuurlijk niet. Gelukkig zijn er alternatieven, en heb ik dit soort dingen eigenlijk niet meer nodig nu ik GnuCash en Portfolio Performance gebruik.

Vernieuwd: Wast nu nog schoner…

En uiteraard heb ik de gelegenheid genomen om een aantal langgekoesterde wensen ook te implementeren. Zo kan ik nu een aantal opties voor grafieken aan- en uitzetten met vinkjes. Voor elke grafiek is er nu ook met één druk op de knop een versie in dark mode. Daar wil ik met mijn blog misschien ook standaard naartoe, maar de diverse dark-mode plugins werken nog niet helemaal mee (lees: één grote commerciële bende). Maar ik kan in mijn spreadsheets ook met één vinkje een Geldnerd logo toevoegen aan grafieken die ik op mijn blog wil gebruiken.

Is ‘ie niet mooi?

Het was een behoorlijke operatie. Met maar één verliezer. Het Excel-icoon, ooit mijn meestgebruikte applicatie, staat nu eenzaam te verpieteren in een hoekje van mijn werkblad. Maar zo is het leven nu eenmaal…. Had ‘ie maar niet bij Microsoft moeten gaan werken.

Ben jij wel eens gewisseld naar een nieuwe programmeertaal?

Beleggingen beheren met mijn spreadsheet

Het is al ruim vier jaar geleden dat ik voor het laatst een versie van mijn beleggingsspreadsheet online gezet heb. Die versie is nogal gedateerd en eigenlijk niet meer aan de praat te krijgen. Mijn eigen spreadsheet is veel verder doorontwikkeld en vereenvoudigd, ik heb er inmiddels tien jaar aan beleggingsdata in zitten. Tijd dus om de meest actuele versie met jullie te delen. Met grote dank aan bloglezer F. voor allereerst het verzoek om de meest recente versie van mijn spreadsheet te delen, en daarna het testen en de waardevolle verbeteringen die hij heeft gedeeld! 🎉

Het delen van deze spreadsheet is ook handig voor mijzelf. Want deze beleggingsspreadsheet is momenteel mijn belangrijkste resterende hindernis om helemaal afscheid te kunnen nemen van Microsoft 365 / Microsoft Office. De komende periode denk ik na of en hoe ik de functionaliteit van mijn beleggingsspreadsheet wil migreren naar iets anders. Eisen daarbij zijn in elk geval open-source, en mijn data in eigen beheer. De afgelopen 10 jaar heb ik gebruik gemaakt van 4 verschillende brokers. Maar ik heb nog zicht op mijn volledige beleggingshistorie en rendement, juist ómdat ik mijn eigen beleggingen beheer met mijn eigen spreadsheet. Het is voor mijzelf dus ook goed om weer eens kritisch naar de functionaliteit van deze spreadsheet te kijken. En ik heb eigenlijk nog niets gevonden wat mijn informatiebehoefte beter afdekt dan mijn eigen spreadsheet.

Dit is een lange blogpost. Maar ik raad je van harte aan om ‘m eerst goed te lezen voordat je met de spreadsheet gaat klooien…

Opbouw van de spreadsheet

De volgende gegevens werk ik regulier bij in mijn beleggingsspreadsheet:

Op het werkblad Transactions leg ik alle beleggingstransacties vast. Aankopen, verkopen, maar ook ontvangsten van dividend in aandelen of cash. De spreadsheet kan ook werken met aandelensplits en warrants, maar die functionaliteit heb ik nog nooit gebruikt.

Op het werkblad Cash leg ik alle transacties vast die plaatsvinden op mijn beleggingsrekeningen, en tussen mijn beleggingsrekeningen en de portefeuille en mijn tegenrekening.

Op het werkblad FundHistory leg ik elke week de actuele aandelenkoers vast voor elk fonds dat ik op dat moment in portefeuille heb. Hiervoor maak ik eerst een ‘Snapshot’ via de knop op het werkblad Dashboard. Daarachter zit een macro die op basis van de transacties doorrekent hoeveel aandelen van het betreffende fonds ik op dat moment bezit, en vervolgens via de Aandelen-functies van Excel de actuele koers ophaalt. Die macro rekent ook uit wat op dat moment de actuele waarde van de betreffende positie is, en die wordt opgeslagen op het werkblad FundValue.

Voor de werkbladen FundHistory, FundValue en TotalValue is de kolom de centrale sleutel. Elke kolom op deze drie werkbladen moet op de eerste regel dezelfde datum hebben staan. Wijk je hier van af, dan lopen vrijwel alle berekeningen in de spreadsheet in de soep!

Dan is er ook nog het werkblad Portfolio. Daar wordt per fonds een hele serie statistiekjes bijgehouden, die gebruikt worden in allerlei rapportages op andere werkbladen. Die statistieken worden automatisch herberekend na het (in mijn geval wekelijks) bijwerken van de koersen en de waarde, en uiteraard als de spreadsheet geopend wordt.

Zoals al mijn spreadsheets heeft ook deze een werkblad Charts, waar je allerlei grafieken kunt raadplegen over je portefeuille. Ook mijn favoriete beleggingsgrafiek.

Het werkblad Actual bestaat uit twee delen. Bovenaan een aantal algemene statistiekjes over de huidige stand van de portefeuille. Daaronder vind je een draaitabel met per positie de (voor mij persoonlijk) belangrijkste statistiekjes. NB: Soms krijg je een foutmelding bij het openen van het tabblad “Actual”. De foutmelding is : “Can’t open PivotTable source file [Naam v/d Excel]Portfolio’. Dat kun je oplossen door op de Pivot Table te gaan staan, en via het ‘Analyze’ menu, te kiezen voor ‘Change Data Source’, en het pad te verwijderen, zodat alleen nog ‘Portfolio!$A:$AK’ overblijft. Excel schijnt dit gedrag vaker te vertonen als een Excel-bestand gedownload wordt en in een ander pad (lokaal) wordt gezet.

Dan het werkblad Advisor. Hier houd ik de gewenste verdeling van mijn portefeuille bij. Op basis van de actuele waarde geeft dit werkblad mij een advies welk fond ik deze maand bij moet kopen om dichter bij de door mij gewenste portefeuilleverdeling te komen. Dat is geen groots geheim algoritme, de spreadsheet kijkt gewoon welk fonds het verst verwijderd is van de gewenste verdeling…

Op het werkblad Fund kun je elk fonds uit je portefeuille kiezen en in één oogopslag zien hoe de prestaties van dit fonds in jouw portefeuille zijn geweest. Ook haalt dit werkblad alle transacties in dit fonds in één overzicht bij elkaar. En je kunt een grafiek met de koers en/of waarde van dit fonds in jouw portefeuille laten zien, voor verschillende tijdsperiodes.

Het werkblad Dashboard is ook een oude bekende uit al mijn spreadsheets. Hiervandaan bedien je de macro’s, en er zijn ook allerlei statistiekjes te vinden.

Verschillen ten opzichte van de vorige versie

De afgelopen vier jaar heb ik meer dan honderd grote en kleine aanpassingen gedaan aan mijn beleggingsspreadsheet. De belangrijkste zet ik voor je op een rijtje.

In het verleden had ik knoppen op het Dashboard die mij leidden naar formulieren om aandelentransacties en cashtransacties toe te voegen. Daar ben ik mee opgehouden, ik werk de transacties nu handmatig bij op de werkbladen Cash en Transactions. Dat is toch gewoon de snelste manier…. De knop om een fonds toe te voegen of te wijzigen heb ik wel gehandhaafd. Die gegevens moeten namelijk tegelijkertijd op een aantal verschillende werkbladen geplaatst worden. Dat is té foutgevoelig als ik dat met de hand ga doen.

Vroeger importeerde ik wekelijks een rapportje over mijn portefeuille dat ik downloadde bij mijn broker. Die functie is overbodig geworden door de aandelenfuncties van Excel. Gewoon één druk op de macro-knop en de actuele koersen worden binnengehaald. Ik heb zelfs een functie gebouwd om historische koersen van een bepaalde datum binnen te halen. Zo kan ik na een vakantie toch de stand van zaken van de tussenliggende weekenden bijwerken. Bijkomend voordeel is dat deze spreadsheet nu broker-onafhankelijk werkt. Alles wat je nodig hebt is Microsoft 365.

Er is functionaliteit bijgekomen die mijn Virtual All Time High bijhoudt, en verder allerlei andere statistiekjes. Alle grafieken zijn in 2020 vernieuwd en gestandaardiseerd. Ook is er nu een tabel met een kostenoverzicht dat ik jaarlijks gebruik voor mijn blogposts. Teveel om allemaal op te noemen.

Gebruiksklaar maken

Voor het eerste gebruik moet je de spreadsheet inrichten voor jouw portefeuille. Dat begint op het werkblad Settings. Je vult het financiële jaar in (nu dus 2023), en het startjaar. In de voorbeeldspreadsheet is dat 2020, ik heb een voorbeeld dataset toegevoegd van een eenvoudige belegger die sinds begin 2020 elke maand geld stort op zijn beleggingsrekening, en daarvan een beperkte set ETFs koopt.

Let op! Om de spreadsheet volledig te kunnen gebruiker moet je bij FixerIO een gratis API-key aanmaken, en die opslaan in het juiste veld op het werkblad Settings. De spreadsheet gebruikt deze API als bron van valutakoersen bij het herberekenen van sommige kolommen. Verwijder ook de volledige Fundlist op het werkblad Settings en op het werkblad Charts voordat je verder gaat.

Vervolgens ga je naar het werkblad Dashboard. Via de knop Fund | New Fund kun je nieuwe beleggingsfondsen toevoegen aan de spreadsheet. Het is van belang om dit te doen voordat je de eerste transacties invoert. Van elk fonds voer je een aantal gegevens in. Als je die opslaat worden de gegevens automatisch verwerkt op elk werkblad waar ze in de toekomst nodig zijn.

De gevraagde gegevens per fonds zijn de ISIN-code van het fonds, de fondsnaam, de afkorting van het fonds, de valuta waarin het fonds genoteerd is, en het Data Type. De meeste gegevens zijn makkelijk te vinden, behalve het datatype. Dat is de code die je nodig hebt om Excel de koers op te laten halen. Het format is altijd XXXX:YYYY, waarbij XXXX de code is voor de effectenbeurs waarop het fonds verhandeld wordt, en YYYY de ’ticker’ van het fonds. Voor mijn favoriete ETF VWRL is de ISIN-code IE00B3RBWM25, de naam ‘Vanguard FTSE All-World UCITS ETF’, en VWRL wordt verhandeld in Euro’s (EUR) op de effectenbeurs in Amsterdam, het datatype is dan ‘XAMS:VWRL’. Er staan een aantal voorbeelden in de spreadsheet.

Er zit nog een bug in de spreadsheet, waardoor hij niet kan omgaan met een situatie waarin er nog nooit een kolom met koersen is ingevoerd. Dat is een situatie die je alleen tegenkomt als compleet nieuwe gebruiker. Voor jouw startdatum moet je dus handmatig op het werkblad FundHistory een eerste kolom met koersen invoeren.

Overigens zijn er elk jaar na de jaarwisseling twee handmatige acties die ik moet verrichten om de spreadsheet klaar te maken voor het nieuwe jaar. Allebei op het werkblad Settings:

  1. Ik verander het veld Financial Year naar het nieuwe jaar, en
  2. In de lijst met Years aan de rechterzijde van het Settings werkblad voeg ik ook het nieuwe jaar toe. Let op, die lijst is een Named Range, het nieuwe jaar moet ook onderdeel zijn van die Range anders komt het niet tevoorschijn op keuzelijsten.

Transacties bijwerken

Zoals gezegd werk ik de transacties handmatig bij. Vrijwel elke aandelentransactie leidt ook tot een transactie op mijn beleggingsrekening. Hieronder een aantal voorbeelden.

Voorbeeld aankoop

Stel ik koop op 25 januari 2023 10 stuks VWRL tegen een koers van € 96,73. Daarvoor betaal ik € 6 transactiekosten. Op het werkblad Transactions ziet dat er als volgt uit:

DateActionPositionNumberPriceFeeTotalExchange
Rate
Remarks
25-01-2023BUYVWRL10,0096,736,00973,301,0000Koop 10 VWRL @ 96,73

Het TOTAL bedrag is de uitgave aan de koop, aantal maal prijs per aandeel, PLUS de te betalen fee.

En de transactie op het werkblad Cash ziet er als volgt uit.

DatePortfolioEURUSDOtherExchange
Rate
Remarks
25-01-2023973,30-973,300,000,001,0000Koop 10 VWRL @ 96,73

Het geld wordt afgeboekt van mijn Euro-beleggingsrekening en bijgeboekt op mijn portefeuille.

Voorbeeld Verkoop

Stel ik VERkoop op 25 januari 2023 10 stuks VWRL tegen een koers van € 96,73. Daarvoor betaal ik € 6 transactiekosten. Op het werkblad Transactions ziet dat er als volgt uit:

DateActionPositionNumberPriceFeeTotalExchange
Rate
Remarks
25-01-2023SELLVWRL10,0096,736,00961,301,0000Koop 10 VWRL @ 96,73

Het lijkt op de KOOP-actie uit het vorige voorbeeld. Maar de actie is nu SELL. En het TOTAL bedrag is de opbrengst van de verkoop, aantal maal prijs per aandeel, MINUS de te betalen fee.

En de transactie op het werkblad Cash ziet er als volgt uit.

DatePortfolioEURUSDOtherExchange
Rate
Remarks
25-01-2023-961,30961,300,000,001,0000Koop 10 VWRL @ 96,73

Het geld wordt nu afgeboekt van mijn portefeuille en bijgeboekt op mijn Euro-beleggingsrekening.

Voorbeeld cash dividend

Stel ik krijg op 28 december 2022 een dividenduitkering op de 226 stuks VWRL die ik in portefeuille heb. Het dividendbedrag is netto € 0,3785 per aandeel. Daarvoor betaal ik bij mijn broker geen transactiekosten. Op het werkblad Transactions ziet dat er als volgt uit:

DateActionPositionNumberPriceFeeTotalExchange
Rate
Remarks
25-01-2023DIVCAVWRL226,000,37850,0080,341,0000Dividend VWRL

En de transactie op het werkblad Cash ziet er als volgt uit.

DatePortfolioEURUSDOtherExchange
Rate
Remarks
25-01-20230,0080,340,000,001,0000Dividend VWRL

Het geld wordt bijgeboekt op mijn Euro-beleggingsrekening.

Voorbeeld storting vanaf mijn tegenrekening

Een storting van mijn tegenrekening naar de beleggingsrekening veroorzaakt alleen een regel op het werkblad Cash. Neem als voorbeeld een maandelijkse overboeking van € 1.000,00 van mijn tegenrekening naar mijn beleggingsrekening. Dat ziet er op het werkblad Cash als volgt uit:

DatePortfolioEURUSDOtherExchange
Rate
Remarks
25-01-20230,001.000,000,00-1.000,001,0000Maandelijkse overboeking

Het geld wordt hier afgeboekt van mijn tegenrekening ‘Other’ en bijgeboekt op mijn Euro-beleggingsrekening.

Voorbeeld servicefee van broker

Ook de maandelijkse afboeking van de servicefee van mijn broker veroorzaakt alleen een regel op het werkblad Cash. Dat ziet er als volgt uit:

DatePortfolioEURUSDOtherExchange
Rate
Remarks
25-01-20230,00-15,000,000,001,0000Maandelijkse Servicefee

Het geld wordt hier afgeboekt van mijn Euro-beleggingsrekening.

Tussenstand bijwerken

Zelf kies ik ervoor om wekelijks de actuele stand van mijn beleggingen bij te werken, elk weekend. Dit bestaat uit twee stappen.

Allereerst druk ik op de knop Snapshot op het werkblad Dashboard. Er draait dan een macro die een tijdelijk werkblad Data aanmaakt, en daarop een standaardrapportage opbouwt met alle fondsen die op dat moment in portefeuille zijn. Voor die fondsen worden automatisch de actuele koersen opgehaald, en op basis daarvan wordt ook de actuele waarde berekend. Daarna is dit macro klaar.

De tweede stap begint zodra je drukt op de knop Process Quotes op het werkblad Dashboard. Die kopieert de koersen van het werkblad Data naar de juiste rij en kolom op het werkblad FundHistory, de actuele waarde naar de juiste rij en kolom op het werkblad FundValue, en maakt voor deze datum een nieuwe kolom aan op het werkblad TotalValue. Daarna wordt het tijdelijke werkblad Data weer verwijderd.

Met de knop Historic Snapshot kun je een Snapshot maken van een willekeurige datum in het verleden. Ik gebruik het soms na vakanties om de tussenliggende weekenden bij te werken. Deze werkt in twee stappen. Je drukt eerst op de knop Historic Snapshot, voert een datum in, en dan gaat Excel op zoek naar de koersen. Om één of andere vreemde reden werken de Aandelenfuncties alleen als er geen Visual Basic macro’s draaien. Daarom stopt de macro na een tijdje. Je krijgt de melding dat je nog een keer op de knop Historic Snapshot moet drukken. Als je dat doet, worden de inmiddels opgehaalde koersen uit het verleden op een tijdelijk werkblad Data geplaatst. Die kun je vervolgens ook verwerken door op de knop Process Quotes te drukken.

De overige knoppen op het Dashboard

De knop Copy Values zorgt dat de laatste kolom met gegevens op FundValue en FundHistory wordt gekopieerd naar een nieuwe kolom, waarbij ook een extra kolom op het werkblad TotalValue wordt aangemaakt. Ik gebruik die op 1 januari als ik de waarden van de laatste dag van het voorgaande jaar heb ingevoerd, om een startkolom op 1 januari van het nieuwe jaar te maken.

Let op: er moet op FundHistory, FundValue en TotalValue een kolom komen voor zowel 31 december van het voorgaande jaar als 1 januari van het nieuwe jaar, anders werken sommige functies niet goed. En de ROI voor het eerste jaar waarin je begint kan natuurlijk ook 0 zijn als je op 1 januari van je startjaar een Total Portfolio Value van 0 hebt.

De knop Remove Values verwijdert de laatst ingevoerde kolom met gegevens op FundValue en FundHistory en ook op het werkblad TotalValue.

Na het indrukken van de knop Refresh TotalValue kun je een specifieke datum invoeren. De kolom die correspondeert met die datum wordt dan opnieuw opgebouwd.

De knop Save / No Calculate slaat de spreadsheet op zonder het uitvoeren van herberekeningen. Die kunnen namelijk wel even duren als de spreadsheet veel data bevat.

Als je wilt migreren

Ben je al een gebruiker van mijn oude beleggingsspreadsheet? En wil je migreren naar de nieuwe? Dat kan, maar dan heb je wat te doen… De stappen uit mijn eerdere blogpost onder het kopje Migratie zijn nog steeds van toepassing.

Tenslotte

Ik kan helaas geen verdere ondersteuning bieden bij het gebruik van deze spreadsheet. Daarvoor heb ik eenvoudigweg te weinig tijd. Of liever: daar wil ik mijn tijd niet aan besteden, ik heb andere prioriteiten. Dit is met afstand de meest complexe spreadsheet die ik heb. Heb je weinig of geen Excel-kennis? Gebruik deze spreadsheet dan niet!

Je kunt versie 2302 van mijn beleggingsspreadsheet rechtstreeks downloaden of vinden op mijn Downloads-pagina. Deze versie werkt alleen met Microsoft 365. Je hebt namelijk toegang nodig tot de Aandelen-functies van Excel om koersen binnen te kunnen halen.

Hoe beheer jij jouw beleggingen?

Minder spreadsheets

Het moment is daar. Ik speculeer er al jaren over en nu is het eindelijk zo ver. Ik heb officieel minder Excel-spreadsheets in mijn financiële stelsel. De slachtoffers? Mijn oudste en meest verbouwde en vertrouwde spreadsheet, de financiële administratie.

Dag Excel hallo GnuCash

Voor de reguliere lezers kan dat geen verrassing zijn. Ik heb de afgelopen periode regelmatig geschreven over de inrichting van GnuCash. Inmiddels zit de administratie van de gezamenlijke huishouding met Vriendin er volledig in, inclusief onze eigen woning en de hypotheek. En ook mijn persoonlijke administratie inclusief spaargeld en beleggingen, creditcards en contant geld, sinds 1 januari 2013 (de officiële start van mijn eigen financiële leven na mijn echtscheiding). Ik heb me ook verdiept in de belangrijkste rapportages. Komend najaar ben ik nog wel plan om me te verdiepen in de mogelijkheden van maatwerkrapportages. Maar dat is iets voor lange donkere winteravonden, niet voor mooie zomerdagen.

De afgelopen maanden heb ik parallel gedraaid met zowel de spreadsheets als GnuCash. En bijna ongemerkt verschoof mijn aandacht steeds meer naar GnuCash. Dus nu is officieel het moment gekomen dat GnuCash de bron is voor mijn financiële administratie.

Twee eraf, twee erbij

Daarmee verwijder ik de twee Excel administratiespreadsheets uit mijn financiële systeem. Maar de waarheid gebiedt te zeggen dat ik de exportbestanden van de Rabobank en ABN AMRO wel ‘voorbewerk’ voordat ik ze importeer in GnuCash. Ik verwijder overtollige kolommen en zorgt dat gegevens het juiste format hebben. Dat doe ik uiteraard niet handmatig. Daar heb ik een spreadsheet voor gebouwd. Mijn experimentele GnuCash Converter. Je kiest een bronbestand, activeert een macro, en de spreadsheet voert de gewenste bewerkingen uit en zet een kant-en-klaar importbestand klaar voor GnuCash. En dat is geen Excel-spreadsheet meer. Maar een spreadsheet gebouwd in Calc, de spreadsheet van LibreOffice.

Het overzicht van mijn financiële systemen is dit jaar dus kleurrijker dan andere jaren. Traag maar gestaag gaat mijn afscheid van Microsoft toch verder. Meer open-source. Conform de meerjarenstrategie die ik in 2019 al formuleerde. De prijs voor snelste migratie zal ik er niet mee winnen, denk ik.

Er is dit jaar natuurlijk ook nog een andere spreadsheet bijgekomen. Mijn Personal Health Monitor waarin ik de statistiekjes bijhoud rond mijn gezondheid, mijn sportmomenten, mijn gewicht. Maar die is (nog) niet zo gecompliceerd en bevat geen macro’s. Dus dat is eigenlijk geen echte spreadsheet, maar alleen een verzameling tabellen en grafiekjes. En die is ook geen onderdeel van mijn Financieel Systeem, maar van mijn Gezond Leven Systeem. Dat telt niet, toch?

Wat gebeurt er met de administratiespreadsheets?

De overstap naar GnuCash betekent in elk geval dat ik geen nieuwe functionaliteit meer bouw in de administratiespreadsheets. Ik zal eind dit jaar nog wel een nieuwe versie publiceren voor de vele gebruikers. Maar dat zou wel eens de laatste kunnen zijn…

Voorlopig werk ik mijn persoonlijke administratiespreadsheet nog wel af en toe bij. Er zitten namelijk overzichten in die ik gebruik voor mijn blog, zoals de No Expense Days en het maandelijkse Spaarpercentage. Maar de administratiespreadsheets zijn niet meer de plek die ik raadpleeg als ik mijn eigen financiën in de gaten wil houden. Dat zijn nu de administraties in GnuCash.

Hoe gaat het met jouw spreadsheets?

Veranderingen in spreadsheetland

De afgelopen periode heb ik weer de nodige aanpassingen gedaan aan mijn spreadsheets. Steeds meer dingen gaan volledig geautomatiseerd in Huize Geldnerd. Sterker nog, er zijn vrijwel geen handmatige handelingen meer nodig. Maar dat kost wel tijd, soms zit ik uren te programmeren om een minuut te besparen…. Dus of het allemaal efficiënt is weet ik niet, maar het puzzelen blijft een leuke hobby.

Mijn wereld in spreadsheets

Mijn financiën worden beheerd met behulp van vijf spreadsheets. Een spreadsheet waarin onze hypotheek wordt bijgehouden. Een spreadsheet voor mijn beleggingen. Eentje voor de financiële administratie, die gebruik ik twee keer (voor mijn persoonlijke administratie en voor de administratie van onze gezamenlijke huishouding). En tenslotte mijn dashboard, die ik elk kwartaal bijwerk en waarop vooral de ontwikkelingen van mijn eigen vermogen wordt bijgehouden.

Mijn uitgangspunten zijn simpel. Ik wil standaard spreadsheet-functionaliteit, dus geen toeters en bellen met extra software. En ik wil zo min mogelijk handwerk.

Recente veranderingen

Dit jaar zijn er alweer een stuk of 50 grotere en kleinere wijzigingen doorgevoerd.

Beleggingen

De grootste impact had de migratie van mijn beleggingen van Binck naar Saxo. En dan vooral het feit dat ik bij Saxo geen wekelijks portefeuille-overzicht kan downloaden en importeren. Jarenlang was dat vaste prik, elke zaterdag. Gelukkig heeft Excel tegenwoordig ingebouwde informatie over beleggingen, het Stock Data Type. En kan ik dus zelf mijn weekrapportage genereren zonder in te hoeven loggen bij Saxo en een bestand te downloaden. Nadeel is wel dat ik hierdoor nog steviger vast zit aan Microsoft en Excel… Verder heb ik deze gelegenheid benut om de VBA-code in de beleggingsspreadsheet eens goed op te schonen, en ik heb ik diverse kleine verbeteringen doorgevoerd.

Ik heb nu ook een macro gebouwd waarmee ik, met behulp van de STOCKHISTORY functie van Excel, voor elke willekeurige datum een weekrapportage kan genereren. In het verleden miste ik nog wel eens weken door bijvoorbeeld vakantie. Nu kan ik na mijn vakantie gewoon de ontbrekende weken aanvullen. Een completere dataset, daar wordt een nerd gelukkig van. Ook heb ik de historie van de S&P 500 index, de Eurostoxx 600 index, en de rente op Amerikaanse 10-jaars staatsobligaties in mijn spreadsheet toegevoegd. Die wordt nu ook elke week bijgewerkt. Hiermee kan ik eigen grafieken gebruiken in mijn kwartaalrapportages en hoef ik die niet meer te ‘lenen’ van Yahoo Finance of elders en te bewerken voor publicatie.

Voor Binck had ik ook een tool gebouwd om de maandelijkse transacties en dividenden ‘om te zetten’ naar het format voor transacties in mijn beleggingsspreadsheet. Eind juni, na de eerste drie maanden werken met Saxo en na de ontvangst van de eerste serie kwartaaldividenden, heb ik zo’n conversietool ook voor Saxo gebouwd. Ik download nu periodiek een standaardrapportage van Saxo en mijn spreadsheet zet die automatisch om. Hiermee heb ik nog steeds al mijn beleggingsinformatie sinds 1 januari 2013 in één format beschikbaar in één spreadsheet, ook al ben ik in de tussentijd meerdere keren van broker gewisseld.

Administratie

Ook de administratie is onderhanden genomen. Ik heb besloten om één keer per jaar een nieuwe versie van deze spreadsheet te publiceren, want tussentijds migreren naar een andere versie is veel handwerk. Eind december kunnen jullie dus een ‘versie 2022’ verwachten van de administratie.

Sinds een tijdje kan ik bij de Rabobank een bestand met creditcardtransacties downloaden. Hiervoor heb ik een importfunctie gebouwd die de transacties ook automatisch verwerkt in mijn administratie. Dit was iets dat ik voorheen handmatig deed. Ook ben ik met mijn spaarbuffer overgestapt van Nationale Nederlanden (NN) naar Lloyds Bank. Mijn NN transacties moest ik handmatig verwerken, maar bij Lloyds kan ik ook een Excelbestand met transacties downloaden. Ook hiervoor heb ik een importfunctie gebouwd die mij handwerk scheelt. Dat waren de twee laatste grote handmatige handelingen in mijn administratie, ook dit is dus nu geautomatiseerd.

Daar staat tegenover dat de Kashbook app, waarmee ik transacties in contant geld registreerde, definitief ter ziele is. Hij werkt niet meer op iOS, en ik heb ‘m dus van mijn smartphone gegooid. Daarmee heb ik ook de importfunctie voor Kashbook-transacties uit mijn administratie verwijderd. Dat is niet heel erg, ik betaal de afgelopen jaren nauwelijks meer met contant geld. Mijn administratie heeft nog wel functionaliteit om transacties in contant geld handmatig te verwerken, dat is genoeg voor mij.

In de administratie heb ik verder nog wat kleine verbeteringen doorgevoerd. Zo heb ik de functionaliteit voor mijn potjessysteem en reserveringen verder verfijnd, en hier ook een paar grafieken voor toegevoegd.

Verder heb ik nog een uitgebreide mailwisseling gehad met een lezer die de administratie graag op MacOS wilde draaien. Dat is helaas lastig, omdat MacOS heel anders met bestanden omgaat dan Windows. Daardoor werken de importfuncties niet. Maar met wat knutselen hebben we een werkende oplossing bedacht voor handmatige import met één druk op de knop, en daarna automatische verwerking in de spreadsheet. Ik ben dol op knutselen! Ook die functionaliteit komt beschikbaar in versie 2022 eind dit jaar.

Hypotheek

De hypotheekspreadsheet berekent nu zelf welke (extra) aflossingen ik moet doen om ons aflosschema vol te houden. Met afronding naar boven naar ronde getallen. En er zijn diverse grafieken bij gebouwd, sommige daarvan zullen jullie terugzien in mijn halfjaarlijkse hypotheekupdate.

Best trots ben ik op een nieuwe functie die in de grafieken naar keuze markeringen (verticale lijnen) neerzet voor de maanden waarin ik een hypotheekupdate op mijn blog heb geplaatst. Daarmee krijg je een beter beeld van de stappen die wij de afgelopen jaren gezet hebben. Totaal nutteloos en overbodig, maar wel leuk. Volgende maand zullen ze te zien zijn in de nieuwe hypotheekupdate, maar hierbij vast een voorproefje.

Dashboard

Mijn financiële dashboard is eigenlijk nog het minst veranderd. Er zijn wat grafieken bijgebouwd, en ik heb wat extra functies gebouwd die bijvoorbeeld de getallen op de Y-as ‘wegtoveren’ en/of datalabels omzetten van absolute getallen naar percentages. Want ik deel veel persoonlijke financiële informatie op mijn blog, maar niet alles….

Overzicht

Al deze wijzigingen bij elkaar leiden tot onderstaand overzichtsplaatje. Waarin opvalt dat de handmatige werkzaamheden vrijwel uitgestorven zijn, alleen de transacties in contant geld moet ik nog handmatig verwerken in mijn administratie. Maar alle andere gegevens komen uit de zes rapportjes die ik download bij mijn banken en broker, of worden gegenereerd door de Stock-functie in Excel. Ook de hypotheekspreadsheet is helemaal zelfvoorzienend. Geen handwerk meer nodig!

En dan heb ik ook nog een nieuwe versie van de FIRE Calculator gepubliceerd, met een uitgebreide uitleg over het rekenmodel. Die tel ik nog niet eens mee in dit overzicht!

Heb jij ook een tijdrovende hobby?

Mijn spreadsheets, een businesscase

Nog even over mijn spreadsheets… Want daar zijn grootse plannen mee. 2020 wordt hét jaar. Zei ik begin dit jaar. En ondertussen bekende ik bij de tussenstand van de jaardoelen dat er nog geen letter code geschreven is. Wat er wel geschreven is zijn nieuwe functies in de administratie en zelfs een totale verbouwing van mijn 48 grafieken. Hoe zit dat?

Kort en goed. Ik twijfel. Ik twijfel over de haalbaarheid van deze Herculeaanse taak. Vier spreadsheets zitten er in mijn universum: de administratie, de beleggingen, de hypotheek en het dashboard. Stapsgewijs opgebouwd sinds 2014. Sinds de basisversies zijn gebouwd heb ik meer dan 250 grotere en kleinere aanpassingen doorgevoerd (daar houd ik uiteraard een lijst van bij). Sommige kostten een half uurtje, anderen meerdere dagen. Ik durf de stelling aan dat er sinds 2014 meer dan duizend Geldnerd-uren in deze spreadsheets zijn gaan zitten.

En ik weet eenvoudigweg niet of ik dat nog een keer op kan brengen.

In 2014 en 2015, in het Verre Warme Land, had nam ik de tijd. De tijd om mijzelf echt nieuwe vaardigheden te leren. Boeken en artikelen te lezen over programmeren in Visual Basic. Te oefenen. Dagenlang en nachtenlang door te halen om de uitdagingen die ik tegenkwam op te lossen. Mijn spreadsheets zijn niet ontworpen, ze zijn organisch gegroeid. Pas na de basisversies is er stapsgewijs structuur in gekomen. Maar dat is een proces dat nog steeds doorloopt.

Dus ben ik nu aan het rationaliseren. Stel dat ik mijn spreadsheets nog 40 jaar gebruik? En per jaar € 55 betaal voor het gebruik van Microsoft Office? Dan ben ik dus € 2.200 kwijt om de huidige spreadsheets te blijven gebruiken, er van uitgaande dat Microsoft VBA blijft ondersteunen of een migratiepad naar een opvolger aanbiedt. Als ik dan met een uurtarief voor mijzelf reken van € 75? Dan mag ik er dus iets minder dan 30 uur aan besteden om een positieve businesscase te hebben? Dat staat in geen verhouding tot de honderden uren die het mij gaat kosten om mijn spreadsheets te migreren. Dus dan maar niks doen?

En dan was er ook nog even een berichtje dat LibreOffice in de toekomst mogelijk ook betaalde software wordt. Dat werd al snel genuanceerd, maar toch. Het is wel een herinnering dat niets zeker is op de lange termijn.

Onlangs heb ik ook nog een weekendje zitten spelen met de nieuwe versie 4.0 van GnuCash. Dat viel me niet tegen. In een uurtje had ik mijn hele grootboekschema erin zitten, en alle bankboekingen van het eerste halfjaar van 2020. Inmiddels ben ik zo ver dat ik het als een bruikbaar alternatief voor mijn administratie beschouw. Maar ik zie ook dat ik heel veel informatie kwijtraak als ik GnuCash echt ga gebruiken, bijvoorbeeld over mijn betaalgedrag. En voorlopig ben ik echt nog iets teveel gehecht aan mijn grafiekjes en statistiekjes. Maar als ik niets zou hebben en nu nog moest beginnen, werd het echt GnuCash. Enige boekhoudkennis is dan overigens wel vereist….

Uiteindelijk is het gewoon rationaliseren dat ik er nog niet echt mee aan de slag ben… Dat ik opgesloten zit in het systeem van Microsoft… Maar ik geef de moed nog niet op. Ooit komt er een oplossing. Denk ik.

Voel jij je wel eens opgesloten?

De 48 Excel-grafieken van Geldnerd

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?