Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Functie die prijs moet berekenen  (gelezen 3924 keer)

0 leden en 1 gast bekijken dit topic.

Offline StriKe

  • Ambassadeur
  • *****
  • Berichten: 4.647
  • Geslacht: Man
Functie die prijs moet berekenen
« Gepost op: 01 september 2005, 15:39:07 »
Hallo,

In Excel vind ik voor volgend probleem niet direct een 'makkelijk op te stellen' formule, vandaar dat ik er zelf eentje dacht te schrijven.

Wat moet er gebeuren:

Ik geef in de functie één parameter mee, een range, of beter gezegd een celadres.

bijvoorbeeld BerekenPrijs(G4)
In G4 staat een integer

Deze functie moet dit doen:

Kijken hoeveel er in A1 staat.

zolang a1 < 100, g4 * 0
van zodra a1 > 100 maar kleiner dan 600, g4* 0,05
vanaf a1 > 600 maar < 1000, g4*0,10
Alles boven de 1000 moet * 0,2 gedaan worden.

De functie zelf schrijven zal nog wel lukken, maar ik zat al meteen met het probleem: hoe krijg ik het resultaat van die functie uiteindelijk in een welbepaalde cel in Excel zelf?
Stel dat het resultaat van die berekeningen in A2 moet komen, welk statement gebruik ik hiervoor dan?

Groeten,
StriKe
0T5326 Dell Computer Corporation, GeForce FX Go5200, Windows XP, Prof, SP2, NL, Mobile Intel(R) Pentium(R) 4 CPU 3.06GHz, 512 MB RAM, HDD:97 GB, NTFS, AVG Anti-Virus, Kerio Personal Firewall, Firefox 2.0, The Bat!

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Functie die prijs moet berekenen
« Reactie #1 Gepost op: 01 september 2005, 15:58:40 »
Schrijf die functie in een standaard module, voorbeeld:
Function BerekenPrijs(ByVal Basis As Range)
BerekenPrijs = Basis.Value * 2
End Function


Als de module een private module is, gebruik nog het keywoord Public Function BerekenPrijs...

Daarna kan je in A2 gewoon schrijven: =Berekenprijs(A1).

Je hebt dan je eigen User defined Function oftewel UDF. Deze zijn zelfs terug te vinden in de Insert Function dialoog, in de categorie User Defined.

Bart
WinXP - Excel 2000/XP/2003

Offline LucHeyndrick

  • Volledig lid
  • **
  • Berichten: 217
  • Oplossing.be
Re:Functie die prijs moet berekenen
« Reactie #2 Gepost op: 01 september 2005, 16:23:48 »
Hoi Strike,

Zolang je het zonder UDF kan stellen, doe je het beter zonder UDF.
Gewone functies zijn immers sneller, en werken altijd (Stel dat je het bestand opstuurt naar iemand die de macro's niet inschakeld.)... bovendien moet je bij UDF's er nog voor zorgen dat ze berekend worden wanneer jij dat wil.

Ik heb je probleem effe bekeken, en het kan volgens mij opgelost worden met een simpele VERT.ZOEKEN functie.

Zie bijlage

Luc
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Functie die prijs moet berekenen
« Reactie #3 Gepost op: 01 september 2005, 21:44:37 »
Hallo,

Ik zou dit doen enkel met de als functie vermits het aantal als-en toch beperkt is, zet volgende formule in cel A2 :

=ALS(A1<100;G4*0;ALS(A1<600;G4*0,05;ALS(A1<1000;G4*0,1;G4*0,2)))

Wel moet je eventueel nog aanpassen voor 100, 600 en 1000 : waar horen ze precies bij?  In uw stelling is dat niet volledig duidelijk, want a1 < 100 => *0 en volgende stelling a1 > 100 maar < dan 600 => * 0,05.  Hier kunnen we voorlopig niet uitmaken wat er gebeurt bij 100.  Ik denk wel dat je dit "probleempje" zelf zal kunnen oplossen door de formule aan te passen  ;)

groetjes
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline StriKe

  • Ambassadeur
  • *****
  • Berichten: 4.647
  • Geslacht: Man
Re:Functie die prijs moet berekenen
« Reactie #4 Gepost op: 02 september 2005, 16:39:08 »
Hallo,

blijkbaar heb ik het niet goed uitgelegd ;)
Tweede poging, dit keer met een voorbeeld

De eerste 100 * 0
Alles tussen 101 en 600 * 0.05
Alles tussen 601 en 1000 * 0.1
Alles groter dan 1000 * 0.2

Dus als ik bijvoorbeeld net 600 ingeef zou dit moeten gebeuren:

100 * 0 = 0
500 * 0.05 = 25
totaal = 25

En niet bijv 600 * 0.05 zoals in de als functie hierboven.

@ Luc, dat Vert.zoeken: met de hopelijk iets duidelijkere uitleg die je nu hebt, nog altijd van overtuigd dat het daarmee eenvoudig op te lossen is? ;)

Groeten,
StriKe
0T5326 Dell Computer Corporation, GeForce FX Go5200, Windows XP, Prof, SP2, NL, Mobile Intel(R) Pentium(R) 4 CPU 3.06GHz, 512 MB RAM, HDD:97 GB, NTFS, AVG Anti-Virus, Kerio Personal Firewall, Firefox 2.0, The Bat!

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Functie die prijs moet berekenen
« Reactie #5 Gepost op: 02 september 2005, 20:45:42 »
Hallo,

Bij deze dezelfde formule maar enkel uitgebreid met de extra berekeningen, ik ben er hier wel van uit gegaan dat A1 en G4 dezelfde waarde hebben (of heb ik het weer verkeerd begrepen  ;D ), waardoor G4 in principe overbodig is.

=ALS(A1<100;A1*0;ALS(A1<600;(A1-100)*0,05;ALS(A1<1000;(A1-600)*0,1+500*0,05;(A1-1000)*0,2+500*0,05+400*0,1)))

De gedeeltes : 500*0,05 en 400*0,1 kan je gerust vervangen door 25 en 40 maar ik heb dit voor de duidelijkheid eerst nog laten staan om aan te tonen hoe de formule opgebouwd werd.

Hopelijk is dit een correcte oplossing.
groetjes
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Functie die prijs moet berekenen
« Reactie #6 Gepost op: 03 september 2005, 11:41:02 »
Het voorstel van buks kan. Die formule heeft wel één nadeel: de grenzen zijn "hard coded" in de formule, m.a.w. de grenzen zitten in de formule zelf. Als je de formule dan later wil aanpassen voor andere grenswaarden kan dat voor ingewikkelde formules een lastig werkje zijn... zelfs als je de waarden verandert door celverwijzingen blijft er een nadeel: wat als het aantal grenzen verandert, dan krijg je meer if-functies...

In bijlage een mogelijke oplossing die wel degelijk met een soort van lookup werkt: de grenswaarden en hun factor staan in een tabel, dus geen "hard coding".

De cel die het resultaat berekent bevat de formule:
=SUMPRODUCT(OFFSET($A$1;1;0;$E$4);OFFSET($B$1;1;0;$E$4))+(($E$1*INDEX($B$2:$B$10;$E$4+1)))
en maakt gebruik van één hulpcel E4. Je kan die hulpcel overbodig maken door in de bovenstaande formule $E$4 te vervangen door de formule in E4, zodat alles met één formule kan berekend worden.

De bijlage zal alles verduidelijken, hoop ik, enne het is dus nog steeds oplosbaar zonder VBA.

Bart

PS: de factor 0.2 voor alles > 1000 moet nog ingevuld worden in lijn 6 van de tabel
WinXP - Excel 2000/XP/2003

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Functie die prijs moet berekenen
« Reactie #7 Gepost op: 03 september 2005, 12:39:05 »
Hallo,

Het grootte voordeel van de als-structuur is dat je slechts 2 cellen nodig hebt (cel met waarde en cel met resultaat) en naar ik uit de probleemstelling afleidt veranderen de waarden (0,05 ; 0,1 ; 0,2) niet op regelmatige basis.

Een ander voordeel is tevens ook dat de werkmap overzichtelijk blijft, ook indien er nog meerdere andere gegevens op voorkomen.

groetjes
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Functie die prijs moet berekenen
« Reactie #8 Gepost op: 03 september 2005, 12:52:20 »
Ja, uiteraard heeft elke oplossing zijn voor- en nadelen...

Mijn suggestie vermijdt vooral "hard coding", wat door programmeurs als "not done" wordt beschouwd, omdat code dan niet herbruikt kan worden. En dat kan ook doorgetrokken worden in formules... Bovendien werk ik zelf niet zo graag met geneste if-functies....

En ook interessant om te weten: stel in het extreme geval dat er meer dan 7 grenzen zouden zijn, dan kan je dit niet meer oplossen met geneste if's, want Excel staat max. 7 geneste if's toe...

Qua overzichtelijkheid is er een simpele oplossing: zet de opzoektabel op een andere sheet, die je zelfs kan onzichtbaar zetten. Je werkt dan best wel met rangenames...
Zo heb je ook maar twee cellen en één formule op de "werk" sheet.

Uiteraard dient de gebruiker te kiezen welke suggestie best bij hem past, wij kunnen enkel proberen zo generiek mogelijke oplossingen aan te dragen...
WinXP - Excel 2000/XP/2003

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Functie die prijs moet berekenen
« Reactie #9 Gepost op: 03 september 2005, 16:17:12 »
Hallo,

Persoonlijk werk ik regelmatig met "redelijk" grootte werkmappen (20 tot 25 werkbladen) waar er per blad redelijk veel info/gegevens op vermeld worden.  Als je dan voor één bepaalde formule nog eens extra naar andere tabellen moet verwijzen dan pas ik liever een beperkte als-structuur toe.  Slechts in het geval er verschillende gebruikers zijn die de waarden moeten kunnen aanpassen dan ben ik voorstander om te werken met een tabel-structuur.

Het is natuurlijk zeer belangrijk als gebruiker om te weten wat je precies wil en wat je zelf prefereert om mee te werken.

groetjes
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

 


www.combell.com