Bladnamen
- 07/07/2019
Voorbeeldbestanden bij dit artikel: | |
Inleiding
Bladnamen kunnen geregeld al eens wijzigen. Als je de naam van een blad wenst te gebruiken in een cel, dan bestaat daar een (lange) formule voor. De bedoeling van dit artikel is de formule aan te reiken, maar vooral die te vereenvoudigen (verkorten) en op hetzelfde moment toch robuuster maken !
De formule die je kan vinden is doorgaans als volgt: =DEEL(CEL("bestandsnaam";A1);VIND.SPEC("]";CEL("bestandsnaam";A1);1)+1;255)
Problemen vragen om oplossingen
Als je dit plakt in een cel (met een Nederlandstalige Excel-omgeving) dan werkt dit gewoon. Als je dat plakt in het tabblad genaamd "Bart", dan zie je ook gewoon Bart als resultaat in de cel. Dat kan handig zijn omdat je misschien documentatie maakt in Excel, en als dan naderhand de namen van tabbladen wijzigen dan heb je geen dubbel werk. Volg gerust mee op basis van het te downloaden bestand bovenaan deze pagina.
Maar onmiddellijk volgt al probleem 1. Als je de cel kopieert naar een ander tabblad, dan verwijst de A1 nog naar cel A1 op het andere blad. Je krijgt een #VERW! verwijzingsfout. OK, dan maar de referentie naar A1 absoluut maken door middel van dollartekens: $A$1. Dit werkt al beter ! Je kan kopiëren/plakken over tabbladen heen.
Kopiëren/plakken is leuk, maar ik vind vooral dat de formule nogal omslachtig is. Ik zou liever als formule gebruiken: =bladnaam, waarbij bladnaam dan een naam is in het bestand waarin we werken. Die naam zal de formule bevatten. Het volstaat dan om in elk blad (waar je dat wenst uiteraard) te zetten in de desbetreffende cel: =bladnaam
Laten we daarom een naam aanmaken. Het gemakkelijkste is Ctrl + F3 te drukken, dan kom je rechtstreeks in dat dialoogvenster. Anders ga je via de Formules > Namen. Maak een nieuwe naam aan (op het niveau van werkboek, NIET werkblad): bladnaam_lang: =DEEL(CEL("bestandsnaam";INDIRECT("A1"));VIND.SPEC("]";CEL("bestandsnaam";INDIRECT("A1"));1)+1;255)
Je zal misschien gezien hebben dat ik in de formule hierboven A1 vervangen heb door de INDIRECT functie. Dat doen we omdat dan A1 dan niet meer blijft teruggrijpen naar A1 op andere tabbladen. INDIRECT is handig maar heeft een kwalijke reputatie aangezien het vertragend werkt in (hele) grote Excel bestanden. Voor dit gebruik volstaat het prima !
Typen we =bladnaam_lang in een cel, dan krijg je als het goed is de naam van het tabblad te zien. Wat je ziet in de formule is dat we 2 keer het stuk van CEL(...) gebruiken. Waarom niet een 2de naam maken met (enkel) dat stukje, en dan vervolgens 2 keer die nieuwe naam gebruiken in de formule voor de bladnaam ? Dan kom je tot de kortere oplossing (met 2 namen ipv 1).
Zo komen we tot de formule =bladnaam, die op zijn beurt gebruik maakt van _fn (noem het gerust zoals je zelf wenst). Laat mij nog 2 belangrijke opmerkingen toevoegen.
- in een niet-Nederlandstalige Excel-omgeving zal het stukje bestandsnaam moeten aangepast worden. In het Engels wordt dat: filename. Het goede nieuws is dat het Engelstalige filename overal in elke taal zal werken, naast dus ook de naam in de taal zelf.
- Het argument A1 in de INDIRECT functie is ook een tekst (string). Het is veiliger om nummers te gebruiken. De ADRES functie laat dit toe. Dit staat ook mee in mijn voorbeeldbestand bovenaan: ADRES(1;1;1)
Lees ook even deze pagina van Ron De Bruin over die internationale issues (Engelse tekst).
Een alternatieve formule waarbij ik gebruik maak van de LET functie: =LET( f; CEL("bestandsnaam";INDIRECT("A1")); DEEL(f;VIND.SPECT("]";f)+1;255))
Zo, meer valt daarover niet te zeggen. Fijne zondag verder.