Jump to content
  • 0

Case - geraak er niet uit


Stamper

Question

Posted

Drie velden : het eerste is VC_NC (voor of na christus met keuzerondje) en tweede is jaar1 (getal), het derde is tijdsperiode (berekeningsveld - niet opgeslagen opnieuw berekenen)

Om dit derde veld autom. te laten invullen tracht ik dit te doen met de Case-functie.

Als 1° veld gelijk is aan V.C. en het jaar1 bevindt zich tussen 1 en 100 dan is het derde veld 1° eeuw, enz...

Heb geprobeerd met de case-functie maar tot hiertoe mislukt dit.

Wat doe ik verkeerd....

Wie helpt me op weg ...

 

Case (

VC_NC = "V.C." and Sum ( Jaar1; "≥ 201 and ≤ 300"); "3° eeuw VC";

VC_NC = "V.C." and Sum ( Jaar1; "≥ 101 and ≤ 200"); "2° eeuw VC";

VC_NC = "V.C." and Sum ( Jaar1; "≥ 1 ≤ 100"); "1° eeuw VC";

"Onbepaalde eeuw")

8 answers to this question

Recommended Posts

  • 0
Posted

De oplossing is om net andersom te werken:

 

Case(vc_nc="NC" and Jaar ≤ 100;"1° eeuw NC";

Case(vc_nc="NC" and Jaar ≤ 200;"2° eeuw NC";

Case(vc_nc="NC" and Jaar ≤ 300;"3° eeuw NC";

Case(vc_nc="NC" and Jaar ≤ 400;"4° eeuw NC";"onbepaald"))))

 

De Case-functie stopt namelijk zodra aan de eerst passende voorwaarde is voldaan.

Je kunt de keuze VC/NC ook uit alle regels halen en als aparte Case ervoor zetten:

 

Case(vc_nc="NC";

Case(Jaar ≤ 100;"1° eeuw NC";

Case(Jaar ≤ 200;"2° eeuw NC";

Case(Jaar ≤ 300;"3° eeuw NC";

Case(Jaar ≤ 400;"4° eeuw NC";"onbepaald"))));

 

Case(vc_nc="VC";

Case(Jaar ≤ 100;"1° eeuw VC";"voor Christus")

))

 

Maar om dit voor alle eeuwen te maken voor en na het jaar 0 wordt dit een hele lange formule. Waarschijnlijk zijn er wel mooiere oplossingen.

  • 0
Posted

@hiker

Nog eens een keer aan't testen geweest, gesleuteld etc... en kom er niet uit

Mocht het toch lukken dan is het zoals je aangeeft : een wréééééd "....lange formule..."

 

@fmwebshop

Dat is het, de eenvoud zelve ... en het geeft weer dat ik iets verder moet kijken dan m'n neus lang is ... heb me gewoon blind gestaard op de Case-functie :oops:

(mea culpa ....)

 

@Burodok

Ook getest en deze is nog korter, maar toegegeven ik snap nu de formule (nog) niet ... dus da's voor strakjes om deze te ontleden.

 

Aan allen, in elk geval m'n ongelooflijke en eeuwige dank en we hebben weeral bijgeleerd :D:D

  • 0
Posted (edited)
...maar toegegeven ik snap nu de formule (nog) niet ...

 

stel we nemen het jaar 1365.

gedeeld door 100 levert dat 13,65.

de ‘Int’-functie gooit vervolgens alles achter de komma weg en dat geeft 13.

daar tellen we dan 1 bij op omdat alle jaren tussen 1300 en 1400 niet bij de 13e eeuw horen maar bij de 14e.

 

en om ervoor te zorgen dat bijvoorbeeld het jaar 100 bij de 1e eeuw wordt gerekend en niet bij de 2e, moet er eerst 1 jaar van het jaartal worden afgetrokken.

 

edit:

er ontbrak nog iets: om ervoor te zorgen dat de berekening ook goed gaat met negatieve jaartallen moeten alle negatieve jaartallen eerst positief gemaakt worden met de ‘Abs’-functie:

 

Int ( ( Abs ( jaar ) - 1 ) / 100 ) + 1

Edited by Guest
  • 0
Posted

@Burodok

Uiteindelijk heb ik, na ontleding, jou formule gebruikt met een kleine aanpassing, nl

If ( IsEmpty ( Jaar1 ) or Jaar1 = 0; "Onbepaalde Eeuw" ; Int ( ( Jaar1 - 1 ) / 100 ) + 1 & "° Eeuw" & " " &

VC_NC)

Als de gebruiker het veld jaar niet invult (hoeft ook niet) of invult met 0 dan wordt dit in de formule opgevangen en krijgt het berekeningsveld de waarde "Onbepaalde Eeuw". (en een bericht bij "0" dat dit niet bestaat)

In tegengesteld geval kreeg je bij een leeg veld jaar1, "°eeuw" als resultaat - bij 0 in veld jaar1 verkreeg je 1° eeuw (beide logisch)

Gezien het jaar 0 niet bestaat, mag (kan) je ook geen 1° eeuw verkrijgen in het berekeningsveld

 

De Abs functie heb ik niet toegepast omdat de eeuw dan niet correct wordt berekend bij jaren die eindigen op 99 en 00, bijv. 199 maakt deel uit van de 2° eeuw - met de Abs behoorde hij toe tot de 3° eeuw.

Idem dito voor bv. 1999 - 2000 enz....

  • 0
Posted
De Abs functie heb ik niet toegepast omdat de eeuw dan niet correct wordt berekend bij jaren die eindigen op 99 en 00, bijv. 199 maakt deel uit van de 2° eeuw - met de Abs behoorde hij toe tot de 3° eeuw.

Idem dito voor bv. 1999 - 2000 enz....

 

waarschijnlijk staan je haakjes in dit geval verkeerd (net als de mijne in eerste instantie). wanneer je abs ( jaar ) - 1 doet gaat t goed, maar wanneer je abs ( jaar - 1 ) doet niet...

  • 0
Posted

Zo doet de formule het perfect :

If ( IsEmpty ( Jaar1 ) or Jaar1 = 0; "Onbepaalde Eeuw" ; Int ((Abs ( Jaar1)-1)/ 100) + 1 & "° Eeuw")

Ben nu een gelukkig man (een kinderhand is gauw gevuld :D ) en we zijn nooit te oud om te leren.

Bedankt voor de tips , hints, enz....

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...