Functie maken lukt niet

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik heb een eenvoudige spreadsheet gemaakt waarbij ik in een bepaalde cel (B3, 'Bouwsom' geheten; zie voorbeeld) een getal kan inkloppen en er dan in o.a. B9 een resultaat wordt berekend. Dat werkt prima. Maar nu wil ik voor een hele reeks verschillende getallen deze actie uitvoeren; zie beginreeks in D23-D27. In E23-E27 moeten de resultaten komen. Ik dacht dat te doen door een functie te maken en daarmee de getallen in kolom D naar cel B3 te sturen en het resultaat van B9 mee terug te nemen en in kolom E te plaatsen: iets in de trant van Rekentool (12.000). Maar op een of andere manier lukt dat niet. Nochtans heb ik vaak met functies gewerkt.

Iemand hier een oplossing voor? Je zou me enorm helpen.Bekijk bijlage rekentool.xlsx
 
Dit in E23 en dan doortrekken? Is dat wat je bedoelt?
Code:
=Productprijs*ZOEKEN(D23;Minkost;Vergunning)
 
Laatst bewerkt:
Nee, niet dat gaat niet goed, want de de bouwsom (getallen in de d23-D27) moeten eerst in cel B3 ingevuld worden wil er een productprijs berekend worden. Dit is nu wel op te lossen door de berekening van de productprijs in elke cel van kolom E mee te nemen, maar is niet zo elegant en is wellicht vertragend voor duizenden acties. Vandaar dat ik dacht een bouwsom als variabele aan een functie mee te geven, die te injecteren in B3 en vervolgens B9 uit te lezen. Is overzichtelijk en flexibel.
 
Wat wil je nu bereiken? Al die gedefinieerde namen zijn overbodig als je een echte tabel gebruikt. De productprijs = het minimum bedrag + een opslag op de bouwsom? Als je even E24:E28 had ingevuld dan had dit de vraag ook al verduidelijkt.
Als je een macro zoekt die D23 tm D28 gaat doorlopen en vervolgens de resultaten in E23:E28 zet dan is dat mogelijk maar dan graag een voorbeeld met wat waar echt staat en waar de resultaten moeten komen.

In de bijlage mijn interpretatie van hoe de formules moeten zijn.
 

Bijlagen

  • rekentool (1).xlsx
    37,3 KB · Weergaven: 30
Laatst bewerkt:
Ik kreeg ineens de goede ingeving: gewoon de spreadsheet in zijn geheel in een functie gieten:
Code:
Function Richt_Vergun(Bouwkosten) As Single
    
    Select Case Bouwkosten
        Case Is >= 25000000: Richt_Vergun = 36715 * 0.26
        Case Is >= 5000000: Richt_Vergun = 21733 * 0.26
        Case Is >= 1000000: Richt_Vergun = (((Bouwkosten - 1000000) * 0.0014) + 11623) * 0.28
        Case Is >= 400000: Richt_Vergun = (((Bouwkosten - 400000) * 0.005) + 5866) * 0.36
        Case Is >= 100000: Richt_Vergun = (((Bouwkosten - 100000) * 0.00984) + 3209) * 0.41
        Case Is >= 50000: Richt_Vergun = (((Bouwkosten - 50000) * 0.02624) + 2029) * 0.48
        Case Is >= 20000: Richt_Vergun = (((Bouwkosten - 20000) * 0.01093) + 1733) * 0.58
        Case Is >= 0: Richt_Vergun = 1518 * 0.58
        If Bouwkosten = 0 Then Richt_Vergun = 0
    End Select
End Function

Functioneert uitstekend en snel.

Bedankt voor het te hulp snellen!
 
Plotinus:
Omdat ik leesbaarheid belangrijk vind wil ik even laten zien dat je in zo'n geval achter een dubbele punt een Tab mag gebruiken.
Tevens is die If regel niet nodig:
Code:
Function Richt_Vergun(Bouwkosten) As Single
    Select Case Bouwkosten
        Case Is >= 25000000:    Richt_Vergun = 36715 * 0.26
        Case Is >= 5000000:     Richt_Vergun = 21733 * 0.26
        Case Is >= 1000000:     Richt_Vergun = (((Bouwkosten - 1000000) * 0.0014) + 11623) * 0.28
        Case Is >= 400000:      Richt_Vergun = (((Bouwkosten - 400000) * 0.005) + 5866) * 0.36
        Case Is >= 100000:      Richt_Vergun = (((Bouwkosten - 100000) * 0.00984) + 3209) * 0.41
        Case Is >= 50000:       Richt_Vergun = (((Bouwkosten - 50000) * 0.02624) + 2029) * 0.48
        Case Is >= 20000:       Richt_Vergun = (((Bouwkosten - 20000) * 0.01093) + 1733) * 0.58
        Case Is > 0:            Richt_Vergun = 1518 * 0.58
    End Select
End Function
 
Mij lijkt het vrij doelloos om een UDF te maken met alleen maar 'harde' waarden. Dan kan je net zo goed een formule gebruiken.
 
Edmoor, je hebt helemaal gelijk. Toen ik 'het licht zag' even snel de functie in elkaar gestoken. Ik ga het nu voor de leesbaarheid even oppoetsen. En inderdaad, de IF-regel is vrij belachelijk: is niet nodig en kan binnen de Case-constructie worden geplaatst.

En nee VenA, de functie is niet vrij doelloos. Ik kan de functie inderdaad in een formule per cel gieten, maar dat ziet er niet erg overzichtelijk uit, vind ik toch. Ik ben heel tevreden met de eenvoudige oplossing, maar er zijn zeker meer mogelijkheden.

hartelijk dank!
 
Die 0 is ook in de Case constructie niet nodig. Als Bouwkosten 0 is levert de functie sowieso 0 op.
Kijk goed naar de laatste regel in de Case in #6, daar staat geen >= meer maar alleen >
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan