Geldnerd.nl

Bloggen over persoonlijke financiën

Tag: Excel (page 1 of 3)

Valutakoersen automatisch bijwerken

Geldnerd is eigenlijk heel lui. Maar werkt soms ook heel hard om die luiheid naar nieuwe hoogten te doen stijgen. Zo ook afgelopen week. Jullie kennen mijn voorliefde voor spreadsheets. Alles automatisch, met één druk op de knop. En daar ga ik steeds een stukje verder in.

Bij de eerste versie van mijn beleggingsspreadsheet moest ik elke transactie handmatig invoeren. Inmiddels experimenteer ik met een versie waarin ik gewoon de geldtransacties en beleggingstransacties importeer. Die kan ik downloaden bij mijn broker. De macro’s zijn nog niet 100% perfect, maar de meeste problemen zijn nu wel opgelost.

Daar zat nog wel één handmatig dingetje bij waar ik mij aan stoorde. Niet alle fondsen waar ik in handel zijn genoteerd in Euro’s. Er zijn er ook die in Amerikaanse dollars genoteerd zijn. Of nog in andere valuta. En omdat ik mijn beleggingen in Euro’s bijhoud, moest ik dan bij iedere transactie de actuele wisselkoers invullen. En die moest ik opzoeken. Gewoon, handmatig. Op een website zoals deze.

Tsja, en dat kan natuurlijk niet. Dat moet handiger. Automatisch. Het heeft me een uurtje of vier gekost, maar het is gelukt. Ik heb gezocht naar een website die via een API benaderbaar is. Een API is een Application Programmable Interface, oftewel een soort ‘stekkerdoos’ op een website die je door een ander programma (bijvoorbeeld mijn spreadsheet) kunt laten benaderen. Die zijn er verschillende. Maar ik zocht (uiteraard) naar een gratis en liefst open-source variant. Ik vond deze, fixer.io. Die verstrekt de gegevens in JSON format (JavaScript Object Notation), een relatief eenvoudige methode voor gegevensuitwisseling.

Dat is handig. Als je bijvoorbeeld de code

http://api.fixer.io/2017-05-12?symbols=USD

naar de website stuurt, krijg je de volgende respons:

{"base":"EUR","date":"2017-05-12","rates":{"USD":1.0876}}

In gewone mensentaal: op vrijdag 12 mei 2017 was de wisselkoers van € 1,00 in Amerikaanse dollars USD 1,0876. Ik heb eerst nog geprobeerd om die respons keurig in te lezen als JavaScript, maar dat werd me al gauw te ingewikkeld. Ik wil daar ook geen extra tooltjes of zo voor installeren, het moet gewoon werken in ‘standaard’ Excel. Dus heb ik besloten om het antwoord van de API gewoon als String in te lezen, en de koers eruit te ‘knippen’. In onderstaande code doe ik dat voor de duidelijkheid nog even in drie stappen, maar je kunt het ook in één stap doen.

Function GetExchangeRate(Datum As Date, toCurr As String) As Double

Dim TempDate As String
Dim qurl As String
Dim TempString As String
Dim TempString2 As String
Dim TempString3 As String

TempDate = CStr(Format(Datum, "yyyy-MM-DD"))
qurl = "http://api.fixer.io/" & TempDate & "?symbols=" & toCurr

TempString = Application.WorksheetFunction.WebService(qurl)
TempString2 = Right(TempString, 8)
TempString3 = Left(TempString2, 6)

GetExchangeRate = CDbl(TempString3 / 10000)

End Function

En dat werkt. Nu hoef ik niet meer handmatig naar valutakoersen te zoeken. Voor de “toCurr” kun je elke valuta gebruiken die Fixer accepteert. Mijn nerdhart is weer blij, ook al weet ik zelf ook wel dat ik uren heb besteed aan iets wat mij nog geen minuut per transactie kostte…

Heb jij nog mooie functies in elkaar geknutseld?

Nieuwe versie beleggingsspreadsheet

Er staat weer een verbeterde versie van de beleggingsspreadsheet online. Met ondermeer een verbeterde draaitabel, waardoor het bestand een stuk kleiner is geworden. Daarnaast is ook de Fund-pagina verbeterd. Je ziet nu in één grafiek de koers en de waarde van het fonds, op twee verschillende y-assen. Dat heeft me nog best wat moeite gekost om het werkend te krijgen, maar het is gelukt!

Je vindt ‘m op de Downloads-pagina. Veel plezier ermee!

Nieuwe versie beleggingsspreadsheet

Afgelopen weekend heb ik een nieuwe versie van mijn beleggingsspreadsheet online gezet. Hierin zijn diverse bugs gerepareerd. Zo ging het mis met importeren als er dividenduitkeringen in het weekrapport zaten. Ook zit de nieuwe Fund-pagina erin. Hier kun je per fonds de hele historie in jouw portefeuille zien.

Veel plezier ermee!

Meer Excel en GoogleFinance

Geldnerd heeft het al vaker gezegd: als je eenmaal begint met spreadsheets, wil je steeds verder. Teruggaan naar minder functionaliteit is geen optie. En dat zorgt ervoor dat ik mijn spreadsheets blijf doorontwikkelen. Telkens opnieuw kom ik een situatie tegen waarin mijn programmatuur niet voorziet (lees: een error). Of ik verzin iets nieuws om mijn spreadsheets functioneel nog beter te maken.

Zo was ik me al een tijdje bewust van een tekortkoming van mijn beleggingsspreadsheet. Tekortkoming in mijn ogen, dan. Alle rapportages focusten vooral op de portefeuille als geheel, en op de fondsen die ik op dit moment in portefeuille heb. Maar ik wilde graag ook wat dieper in kunnen zoomen op individuele fondsen. En die informatie zat nu wel een beetje verstopt.

Dus heb ik een nieuw scherm gebouwd, ‘Fund’. Hier kies je uit een lijst één van de fondsen die in de spreadsheet zitten. Vervolgens worden automatisch alle belangrijke gegevens van dit fonds uit de spreadsheet bij elkaar gehaald. Ook wordt een lijst getoond van alle transacties die ik met dit fonds heb uitgevoerd. Bovendien kun je een specifieke grafiek laten zien van de ontwikkeling van de koers of van de waarde van het betreffende fonds. Hier laat het systeem automatisch de koersen zien uit de periode waarin ik het fonds in portefeuille heb gehad. Hieronder zie je hoe het scherm eruitziet. Het zit nog niet in de versie van de beleggingsspreadsheet die je kunt downloaden. Laat het me maar even weten in de comments of via de contactpagina als jullie er interesse in hebben.

Ook heb ik me iets meer verdiept in GoogleFinance. Deze functionaliteit van de vrienden van Google geeft je een schat aan informatie over allerlei fondsen die je kunt binnenhalen in je spreadsheets. Je kunt bijvoorbeeld historische koersen downloaden. Ik wilde graag bekijken of ik hier iets mee kon om mijn spreadsheet automatisch bij te werken. De GoogleFinance functie werkt voor de Google spreadsheet, maar met een kleine omweg kun je ‘m ook gebruiken in Excel. Hiervoor heb ik een voorbeeldspreadsheet gedownload bij InvestExcel. Daarmee ben ik zelf gaan experimenteren.

Daarbij kwam ik er helaas achter dat GoogleFinance maar iets meer dan de helft van de fondsen herkent die ik in portefeuille heb. Daarmee is de functie voor mij maar beperkt bruikbaar. Maar ik ga deze functie wel in de gaten houden, want als het aanbod uitgebreid wordt komen er veel nieuwe mogelijkheden voor mijn spreadsheet-manie.

Heb jij recent nog aan je spreadsheets gesleuteld?

Beleggingsspreadsheet online

Nadat ik eerder mijn administratiespreadsheet online heb gezet (zie hier en hier) is nu mijn beleggingsspreadsheet aan de beurt. Deze bevat nog veel meer macro’s en zelfgeprogrammeerde functies dan de administratie, ruim 100 Kilobyte aan zelf geprogrammeerde meuk. Ook deze komt weer zonder gebruiksgarantie en zonder uitgebreide handleiding, en met grotendeels fictieve data. Maar in deze blogpost wel een uitleg hoe de spreadsheet globaal in elkaar zit.

Er zijn twee soorten gegevens die ik inlees in mijn spreadsheet. Ten eerste is dat de wekelijkse rapportage van Alex Beleggingen, de beleggingsbroker waar ik gebruik van maak. Als ik bij hen inlog kan ik bij het overzicht van mijn portefeuille een Excel-bestandje downloaden. Met de ‘Import Alex’ knop lees ik dat bestandje in, en zet ik alles in het juiste format (zo verwijder ik bijvoorbeeld lege regels tussen categorieën). Met de ‘Process Quotes’ knop worden deze gegevens vervolgens verwerkt. Zo wordt per fonds de koers (in fondsvaluta) op de juiste regel en de juiste kolom van het werkblad ‘FundHistory’ gezet. Datzelfde doe ik met de waarde van het fonds (in Euro) op het werkblad ‘FundValue’. Ook sla ik de totaalwaarde van mijn portefeuille voor die week op in het werkblad ‘TotalValue’. Daarna wordt het spreadsheetje van Alex automatisch gearchiveerd. Dit Alex rapportje download en verwerk ik eigenlijk elk weekend.

Zoals ik wel eens geschreven heb, maak ik voor mijn beleggingen ook gebruik van Alex Vermogensbeheer (al vraag ik me al een tijdje af: hoe lang nog?). Dit behandel ik in mijn spreadsheet eigenlijk ook als een aandelenfonds. Ik heb mijn originele inleg verdeeld in 1.000 aandelen van € 25. Als ik extra geld bijstort, reken ik dat tegen de dan geldende waarde om naar het aantal aandelen wat ik fictief bijkoop. Elke week haal ik van de Alex website ook de waarde van mijn portefeuille bij Vermogensbeheer. Dit bedrag zet ik in het gereserveerde veld op het ‘Dashboard’ werkblad. Tijdens het importeren van het Alex-bestand wordt dit bedrag ook mee verwerkt, als ware het een normaal aandelenfonds.

Naast de wekelijke rapportage zet ik ook al mijn Beleggingstransacties (werkblad ‘Transactions’) en Cashtransacties (werkblad ‘Cash’) gerelateerd aan de beleggingsrekening in de spreadsheet. Dan gaat het bijvoorbeeld om dividendbetalingen die ik ontvang, of om geld dat ik overmaak van of naar mijn lopende rekening. Bij vrijwel elke beleggingstransactie hoort ook een cashtransactie, bijvoorbeeld bij het kopen van aandelen of het verkopen van aandelen. Ik heb verschillende manieren om dit vast te leggen. Via knoppen op het Dashboard kom je in speciale invoerschermen voor het toevoegen van fondsen en transacties, die op de achtergrond de ingevoerde gegevens in de juiste cel op het juiste werkblad zetten. Maar ik heb ook een (zéér experimentele) aparte spreadsheet waarin ik afschriften van Alex in kan lezen, en om kan zetten naar het format dat ik gebruik in mijn beleggingsspreadsheet. Die experimentele sheet publiceer ik nog maar even niet. Als ik de functies daarin stabiel heb, wil ik ze integreren in de volgende versie van de beleggingsspreadsheet.

Daarmee bevat mijn spreadsheet alle transacties, en op weekbasis de actuele koers en waarde per fonds in mijn aandelenportefeuille. Dat is de basis voor alle berekeningen.

Er zijn twee belangrijke dashboards opgenomen in de spreadsheet. Op het werkblad ‘Actual’ zie je de belangrijkste indicatoren voor mijn portefeuille als geheel, en ook per fonds dat ik op dat moment in portefeuille heb. Ik heb er eerder over geschreven. Deze draaitabel wordt automatisch herberekend als je dit werkblad opent. De gegevens komen uit het werkblad ‘Portfolio’, waar ze worden bijgehouden voor elk fonds dat ik ooit in portefeuille heb gehad. Waarom die aparte draaitabel? Voor het overzicht! Want anders moet je tussen alle fondsen die ik ooit in portefeuille heb gehad op zoek naar de actuele stand van vandaag.

Het tweede dashboard is het werkblad ‘Charts’. Hier kun je kiezen uit diverse soorten grafieken (o.a. koersverloop en waarde-ontwikkeling) met diverse looptijden. Bij de meeste grafieken kun je zelf kiezen welke fondsen je wilt laten zien, automatisch kiest mijn macro de fondsen die op dat moment in portefeuille zijn. Deze grafiek wordt automatisch herberekend als je dit werkblad opent, en ook als je één van de instellingen verandert. Dit is iets waar ik best wel trots op ben, het was best lastig om te programmeren. Ik zoek nog wel naar manieren om het sneller te maken, dus tips zijn meer dan welkom…

Op het werkblad ‘Dashboard’ vind je de knoppen voor de verschillende functies, met ‘Import Alex’ en ‘Process Quotes’ als belangrijkste. Ook staat hier een soort ‘verkorte statistiek, waarin ik snel kan zien hoe de totale waarde zich afgelopen week ontwikkeld heeft en wat de stand van het jaar is. Ook kan ik (in het tabelletje rechts) door een jaar te kiezen kijken wat de belangrijkste kenmerken van dat beleggingsjaar waren.

Let er bij het bestuderen van de spreadsheet op dat niet alle Visual Basic code in de standaard module zit. Een aantal werkbladen heeft ook eigen code. Oh, en dan vergeet ik nog het werkblad ‘Instellingen’. Daar vind je allerlei instellingen en opsommingen die gebruikt worden op verschillende plaatsen in de spreadsheet.

Op de Downloads pagina kun je mijn spreadsheets vinden.

Hoe beheer jij jouw beleggingen?

Verder met mijn spreadsheets

Inmiddels een week geleden heb ik mijn administratiespreadsheet gepubliceerd. In eerste instantie met een bugje, maar die is hersteld. De nodige mensen hebben ‘m inmiddels gedownload. En via de mail zijn er ook al een aantal vragen binnengekomen.

Om maar met de meest gestelde vraag te beginnen: nee, er komt geen uitgebreide handleiding. Ten eerste omdat het mij eenvoudigweg aan de tijd ontbreekt om die te schrijven. Maar ik denk ook dat ik niet in staat ben om een goede handleiding te schrijven. Ik ken de spreadsheet en de macro’s van haver tot gort, want ik heb ze zelf gebouwd, letter voor letter. En heb dus geen idee waar mensen tegenaan lopen die ‘m gewoon gaan gebruiken.

Maar het zou ook voorbijgaan aan het doel wat ik heb met het publiceren van de spreadsheet. Het is geen kant en klare administratie die je zomaar kan gebruiken. Daarvoor vind ik het ook te riskant om met macro’s te werken als je ze niet helemaal doorgrondt en problemen niet zelf kunt oplossen. Wil je je niet verdiepen in Excel en Visual Basic, neem dan liever een kant en klaar pakket zoals YNAB of WinBank.

Ik publiceer mijn spreadsheet vooral om mensen te laten zien wat er kan met Excel. En om mensen inspiratie te geven voor het aanpassen van hun huidige spreadsheet. Daarom ben ik ook zo benieuwd naar de spreadsheets van anderen, omdat ik ook graag nieuwe ideeën opdoe.

Dus, geen handleiding. Maar ik zal best nog wel wat meer schrijven over hoe de spreadsheet in elkaar zit, en ook vragen zal ik wel beantwoorden. Ook als ik binnenkort mijn (nog veel uitgebreidere) beleggingsspreadsheet online zet.

Heb jij al naar mijn administratiespreadsheet gekeken?

Een berg data

“Zeer overzichtelijk en duidelijk, maar wat een berg data houd je bij”. Dat was onderdeel van de reactie van Chris op de publicatie van mijn administratie-spreadsheet. Het zette me aan het denken (dankjewel Chris!).

Mijn spreadsheets zijn het resultaat (of beter de tussenstand) van bijna 15 jaar actief bezig zijn met mijn financiën. Het is eenvoudig begonnen. En dan krijg je een idee. “Ik wil weten wat…”, en dan ga je dat bouwen. Soms werkt dat niet of levert het niet op wat je hoopt, en dan haal je het weer weg. Maar als het werkt en de informatie oplevert die je hoopt, dan wordt het onderdeel van je systeem. Zo is het logisch dat er inmiddels de nodige functionaliteit in mijn spreadsheet zit. Maar de basis: een globale jaarrekening, het grootboek met de realisatie en budget per grootboekrekening, en de sheet met de afzonderlijke geïmporteerde boekingen, is al bijna 15 jaar hetzelfde.

In 2015, tijdens ons verblijf in het Verre Warme Land, heb ik al mijn spreadsheets van de grond af aan opnieuw opgebouwd. Tot die tijd zat er vrij veel handwerk in. Handmatig importeren van de bestanden die ik download bij de bank. Handmatig boeking voor boeking de juiste grootboekrekening erbij zetten. Ik deed (en doe) het graag, want het geeft me inzicht en rust. Maar bij de Grote Verbouwing werd het uitgangspunt: zo min mogelijk handwerk. Toen zijn de macro’s gekomen. Importeren. Voorcoderen. Maar ook automatisch bepalen tot welke datum de boekingen bijgewerkt zijn.

Dus ja, ik houd een hele berg data bij. Maar het kost me nauwelijks werk. ‘Klik’ downloaden. ‘Klik’ importeren. ‘Klik’ Voorcoderen. Enkele boekingen met de hand coderen. Kopiëren naar de Boekingen sheet. Klaar. Alle berekeningen worden automatisch bijgewerkt. De meeste tijd besteed ik nu aan het bekijken van de Jaarrekening en het Grootboek. Lig ik op schema? Zijn er bijzondere of vreemde dingen? En dat is ook wat ik wil doen, dat is waar het mij om gaat.

Ben ik doorgeschoten in mijn ontwikkeldrift? Ja, best wel een beetje. Een Functie die uitrekent hoeveel dagen er in dit jaar zitten gaat wel ver, dat kun je ook aan het begin van het jaar eenmalig handmatig in dat veld zetten. Maar ach, ik was toch bezig met programmeren. Niet omdat het moet, maar omdat het kan.

Mijn spreadsheet vind je op de Downloads pagina. Hoe ontwikkelen jouw spreadsheets zich?

Administratie-spreadsheet online

Het is zover. Naar aanleiding van mijn eerdere blog publiceer ik mijn administratie-spreadsheet. Best wel spannend vind ik dat. Het is een versie met grotendeels fictieve data die ik geanonimiseerd heb. Maar het gaat uiteraard niet om de data. Het gaat om de opzet en om de Visual Basic macro’s die eronder liggen. Mijn spreadsheets zijn gebouwd met Microsoft Excel 2013 en werken bij mij probleemloos onder Windows 10.

Ieder jaar op 1 januari start ik met een nieuwe spreadsheet. Het is een jaaradministratie. Maar omdat ik tegenwoordig nauwelijks meer wijzigingen aanbreng in mijn grootboekrekeningschema kan ik de sheets makkelijk naast elkaar zetten om de trends over meerdere jaren te zien.

Mijn sheet ondersteunt het importeren van de bestanden van twee banken, Rabobank en ABN AMRO. Dat zijn de twee banken waar ik momenteel een rekening heb. Van Rabobank download ik het CSV bestand, van ABN het TXT bestand. De knop hiervoor vind je op het werkblad ‘Jaarrekening’. Deze versie werkt alleen correct met de Rabo macro. Beide banken plaatsen het boekingsbedrag namelijk in een verschillende kolom, en dat moet je dus even aanpassen in de kolom op het werkblad ‘Grootboek’ waar de totalen opgeteld worden.

Het eerste werkblad ‘Jaarrekening’ geeft een samenvatting van de inkomsten en uitgaven per categorie, en vergelijkt ze ook met budget. Ook zie je hier de tussenrekening in de 900 (inkomsten) en de 9000 (uitgaven) groep. Als ik bijvoorbeeld geld overboek van mijn lopende rekening naar mijn spaarrekening dan is dat geen uitgave, maar een interne verschuiving. Idem met geld wat ik naar mijn beleggingsrekening boek. Dat zie je dus (onder de inkomsten en uitgaven) apart weergegeven. Overigens kijkt mijn spreadsheet zelf tot welke datum er boekingen zijn ingevoerd, dat zie je hier in het veld ‘Bijgewerkt tot’.

De boekingen worden tijdens het Importeren op een tijdelijk werkblad ‘Data’ gezet. Kopiëren naar het werkblad Boekingen (waar alle boekingen voor een jaar dus onder elkaar komen te staan) doe ik nog handmatig. Ik ben te bang dat er een keer wat misgaat als ik dat automatisch doe, en dat mijn administratie daardoor in de soep draait. Met de knop ‘Verwijder Datasheet’ gooi ik het tijdelijke werkblad weer weg als de gegevens correct gekopieerd zijn.

De knop ‘Voorcoderen’ activeert een macro die kijkt naar een aantal kenmerken van de boeking. Voorcoderen werkt op de gegevens op het tijdelijke werkblad ‘Data’. De gegevens waarmee de macro vergelijkt staan op hebt werkblad ‘Voorcoderen’. Als de kenmerken overeen komen dan krijgt de boeking op het werkblad ‘Data’ de grootboekrekening toegewezen die op het werkblad ‘Voorcoderen’ bij de boeking staat. Boekingen die de macro niet herkent moet je handmatig voorzien van een grootboekrekeningnummer. Maar op deze manier wordt gemiddeld ruim 80% van mijn uitgaven automatisch aan de juiste grootboekrekening gekoppeld.

Op het werkblad ‘Grootboek’ zie je de uitgaven per grootboekrekening bij elkaar opgeteld. Hier kun je per rekening ook een budget ingeven. Op basis daarvan (en van de datum tot waar de boekingen zijn bijgewerkt) berekent de spreadsheet hoeveel budget er YTD (Year To Date – tot op dit punt in het jaar) beschikbaar was. Ik werk alleen met jaarbudgetten, niet met maandbudgetten.

Op het werkblad ‘Creditcard’ houd ik gedurende de maand mijn creditcard-uitgaven bij. Zodra de creditcard wordt afgeschreven signaleert mijn spreadsheet dat tijdens het Voorcoderen (melding ‘Er is een credit-card boeking’). Als ik die krijg dan druk ik op de knop ‘Creditcard Verwerken’ op het werkblad ‘Jaarrekening’. De macro zoekt dan de juiste creditcarduitgaven erbij en zet die onder de boekingen op het werkblad ‘Data’. Hij doet dat van boven naar beneden vanaf het werkblad ‘Creditcard’ en stopt zodra het juiste totaalbedrag van de creditcardboeking bereikt is. De creditcardboeking zelf krijgt als grootboekrekeningnummer nul (‘0’), zodat die ook niet meetelt in de uitgaven. Het zijn immers de afzonderlijke betalingen die belangrijk zijn voor het totaalbeeld.

Tenslotte vind je op het werkblad ‘Jaarrekening’ nog de knop ‘Kashbook importeren’. Voor het bijhouden van mijn uitgaven in contant geld (dat zijn er steeds minder) gebruik ik de app ‘Kashbook‘ op mijn smartphone. Vanuit Kashbook kun je alle boekingen in CSV format aan jezelf sturen. Die importeer ik en ze worden dan verwerkt op de juiste grootboekrekening, ook weer op een tijdelijk werkblad ‘Data’. Vandaar kun je ze ook weer zelf kopiëren naar het werkblad ‘Boekingen’.

Alle te importeren bestanden lees ik in vanuit mijn ‘Downloads’ directory, die je in kunt stellen op het tabblad ‘Handleiding’. Ook kun je hier instellen in welke directory de importbestanden na verwerking opgeslagen moeten worden, en ook moet je hier de volledige naam van de administratie opgeven. Dat wordt gebruikt in onder andere de import-macro’s.

Met het contant geld, de creditcard-uitgaven en alle boekingen en pinbetalingen vanaf mijn bankrekening heb ik een compleet beeld van al mijn inkomsten en uitgaven.

Hier ga je naar de downloadpagina.

Over een tijdje publiceer ik ook mijn beleggingsadministratie. Die is ietsje ingewikkelder dan deze. Ik hoop vooral dat andere mensen ook hun spreadsheets en macro’s online gaan zetten. Want ik wil graag ook leren van anderen!

Wat vind je van mijn spreadsheet?

Tussendoor-spreadsheet-klooi-blogje

Het was weer eens zover. Eens in de zoveel tijd erger ik me aan mijn beleggingsspreadsheet. Dan duren de verwerkingen van mijn weekrapportjes weer te lang, of doet ‘ie er weer te lang naar mijn zin over om mijn rapportages te laten zien op het scherm. En je kunt wel ieder half jaar een nieuwe laptop met snellere processor en nog meer geheugen kopen, maar dat lost het vaak ook niet op.

Dus eens in de zoveel tijd ga ik weer op zoek naar manieren om mijn macro-code te optimaliseren. Zo ook vandaag.

Allereerst ben ik ervoor gaan zorgen dat de belangrijkste macro’s ongestoord kunnen draaien. Dat zijn de macro’s voor het Importeren en Verwerken van de wekelijkse koersrapporten, voor het bijwerken van mijn Rapportages (voor de liefhebbers: Pivot-tabel) en voor het bijwerken van de Grafieken. Mijn spreadsheet zit vol met functies die zichzelf bijwerken als er iets verandert. En dat vertraagt natuurlijk enorm als ze dat ook doen tijdens de bovengenoemde verwerkingen. Goede tips vond ik hier en met name ook hier.  Die laatste oplossing heb ik vrijwel één-op-één overgenomen.

Aan het begin van mijn code heb ik dus drie variabelen toegevoegd die voor mijn hele spreadsheet gelden.

Public CalcState As Long
Public EventState As Boolean
Public PageBreakState As Boolean

Verder heb ik de twee subroutines toegevoegd:

Sub OptimaliseerCode_Begin()

Application.ScreenUpdating = False
EventState = Application.EnableEvents
Application.EnableEvents = False
CalcState = Application.Calculation
Application.Calculation = xlCalculationManual
PageBreakState = ActiveSheet.DisplayPageBreaks
ActiveSheet.DisplayPageBreaks = False

End Sub

En aan het eind moet je dat natuurlijk weer ongedaan maken.

Sub OptimaliseerCode_End()

ActiveSheet.DisplayPageBreaks = PageBreakState
Application.Calculation = CalcState
Application.EnableEvents = EventState
Application.ScreenUpdating = True

End Sub

Vervolgens moet ik die code natuurlijk aanroepen in mijn eigen macro’s. Dat doe ik op de volgende manier in elk macro en elke functie die van toepassing is:

'Optimaliseer Code
Call OptimaliseerCode_Begin

'Hier staat dan mijn eigen code... 

'Optimaliseer Code 
Call OptimaliseerCode_End

En kijk mij eens een mooie plugin hebben om die code professioneel te publiceren! In de eerste test werden de macro’s voor importeren en verwerken ongeveer vier keer zo snel door deze ingreep. En ook bij het actualiseren van mijn weekrapportage en mijn grafieken was er een behoorlijke sneheidswinst. De nerd in mij is weer dolgelukkig.

Ik ga nog even apart kijken naar de code voor de Pivot. En voor de import overweeg ik om te schakelen van ‘veld voor veld inlezen’ naar ‘in één keer inlezen in een array, en in één keer wegschrijven in een sheet’. Ik lees op diverse plekken dat dat ook veel snelheidswinst op kan leveren. Maar dat is een wat ingrijpender operatie, daar kom ik nog wel op terug.

Ben ik weer te nerdy?

Spreadsheets delen

Geldnerd is dol op spreadsheets. Dat is vrij algemeen bekend. En vooral mijn financiële administratie en beleggingsspreadsheet zitten vol met macro’s die het leven makkelijker maken en het voeren van de administratie terugbrengen tot (bijna) één druk op de knop. Daar ben ik best wel een beetje trots op.

Regelmatig krijg ik de vraag om meer details te geven, of om de spreadsheets te delen. Dat wil ik best doen. Maar ik worstel nog een beetje met de manier waarop. Uiteraard zou ik mijn persoonlijke gegevens verwijderen, maar dat maakt mijn worsteling niet kleiner. Want de spreadsheets zijn helemaal op mijn persoonlijke situatie (en de banken en beleggingswebsites waarmee ik werk) geschreven. En daarnaast moet je behoorlijk wat weten van Excel en Visual Basic om er echt mee aan de slag te kunnen. Kun of wil je dat niet, dan kun je beter met een kant en klaar pakket aan de slag.

Ik kan natuurlijk ook een serie blogjes schrijven, en in ieder bericht een functie toelichten. Hoe is de logica opgebouwd en hoe heb ik het geprogrammeerd, inclusief de Visual Basic code. Maar ja, aan één functie heb je ook weinig. Het is de combinatie en het samenspel die het interessant maakt. En volgens mij zitten veel lezers niet te wachten op nog meer ‘nerdy’ berichtjes met programmacode en technische verhalen. Of toch wel?

Kortom, ik ben er nog niet uit. Dus dacht ik: laat ik het gewoon eens aan jullie voorleggen. Wat lijkt jullie een goede manier om dit te delen? Of kan ik dat maar beter niet doen omdat er dan massaal afgehaakt wordt? Of hebben jullie sowieso geen behoefte aan spreadsheets?

Older posts

© 2017 Geldnerd.nl

Theme by Anders NorenUp ↑