• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Kolomnaam in formules gebruiken in plaats van kolomletter

Status
Niet open voor verdere reacties.

Wieltje

Gebruiker
Lid geworden
11 nov 2007
Berichten
17
Omdat de vele en lange formules in mijn werkblad wat onoverzichtelijk worden, zou ik graag een methode hebben om cellen in een bepaalde kolom te kunnen addresseren op kolomnaam in plaats van de kolomletter.

Ter verduidelijking een vereenvoudigd voorbeeld:
Code:
    A        B      C           D
1  aantal  prijs  totaal     gewenst:
2  10       1.95  =A2*B2  =at(aantal)*at(prijs)
3  20       2.95  =A3*B3  =at(aantal)*at(prijs)

In plaats van de formules in kolom C zou ik dus graag formules in de trend van kolom D willen gebruiken, zodat ik bij het terugkijken en bewerken van de formules in een oogopslag kan zien wat er gebeurt in plaats van steeds horizontaal te moeten scrollen om te zien welke gegevens er ook alweer in kolom AQ3 staan.

Nu had ik het volgende bedacht: ik definieer een naam voor de kolomnamen (A1 = "aantal" etc) en maak de volgende formule in VBA:
Code:
Function at(kolom_rangenaam As range)
    at = Cells(Application.Caller.row, kolom_rangenaam.Column)
End Function

Op zich werkt dit prima, maar het probleem is het vernieuwen van de waardes: User Defined Functions worden alleen opnieuw berekend als een van de argumenten verandert. Gezien het argument van mijn functie de kolomtitel is en niet de daadwerkelijke cel met de data die gebruikt wordt, wordt de functie dus niet automatisch herberekend. Ik heb hier 2 mogelijke oplossingen voor gevonden:
- Het gebruik van Application.Volatile (True); hierbij wordt de UDF echter voor iedere occurence (orde N) uitgevoerd bij iedere wijziging van een willekeurige cel in het werkblad
- De namen definieren voor de hele kolom in plaats van alleen de titelcel; hierbij wordt de UDF weliswaar uitsluitend uitgevoerd bij wijzigingen in de betreffende kolom, maar met enkele honderden rijen in mijn werkblad is orde N nog steeds teveel om efficient data in te kunnen voeren in die kolom


Mijn vragen:
- is er misschien een standaardfunctie voor mijn doel (adresseren op kolomtitel in plaats van kolomletter) die ik over het hoofd heb gezien?
- is er iemand hier die een idee heeft hoe ik het update-probleem kan tackelen en hoe ik er dus voor kan zorgen dat bij het wijzigen van een cel in de invoerkolom, mijn UDF slechts voor de bijbehorende rij uitgevoerd wordt (orde 1)?
- of heeft iemand nog andere suggesties waarmee ik mijn doel kan bereiken? Voor de duidelijkheid: het moet in het uiteindelijke gebruik dus echt 1 functie zijn, aangezien het invoegen van meerdere geneste functies het geheel juist ingewikkelder zou maken in plaats van overzichtelijker.
 
Volgens mij kun je in kolom C gewoon =aantal*prijs zetten, mits je bij Opties, tabblad Berekenen, een vinkje zet bij Labels in Formules Accepteren.
Ik werk nog met Exel 2002.

Groetjes,
Mathieu
 
frusty.gif
Nou werk ik al een aantal jaren met excel en dacht ik het wel zo'n beetje van binnen en van buiten te kennen, maar dat ik dit niet wist en nooit geprobeerd heb is toch wel een domper :)

Hartelijk dank voor je antwoord. Als je een naam gedefinieerd hebt voor meerdere cellen in een rij/kolom dan kun je die naam dus gewoon gebruiken in de bijbehorende rijen...

Edit: ik kan de instelling zo 1.2.3 niet vinden in excel 2010 maar zo te zien staat het standaard aan.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan