Slimme Iif mogelijk?

Status
Niet open voor verdere reacties.

arnoderuig

Gebruiker
Lid geworden
8 sep 2000
Berichten
577
In een query wil ik dat een bepaalde kolom een waarde aanneemt die afhankelijk is van een bevraging op andere kolommen. Uiteraard zal het mij mogelijk zijn hiervoor een geneste Iif te bedenken maar vraag me af, voordat ik daaraan begin, of er een slimme truc denkbaar is. De kolomnamen zijn A en B. Het resultaat moet naar kolom C. De situatie is als volgt:

Als A=B dan C wordt 5
Als A=5 en B=1 dan C wordt 5
Als A=6 en B=2 dan C wordt 5
Als A=5 en B=2 dan C wordt 4
Als A=6 en B=1 dan C wordt 4
In alle overige gevallen wordt C 0.

Zowel A als B kan de waarde 1 tot en met 9 bevatten.

Wie weet raad.

Arno de Ruig.
 
Ach slim, leuk zeker!

Beste Arno,

Leuke vraag. Even zitten puzzelen. Het resultaat van dit gepuzzel is een een hele simpele query, maar daarentegen een uitgebreide zelfgedefinieerde functie. Met de vijf waarden die je noemt is een geneste if makkelijker, maar als het aantal combinatie meer dan zeven bedraagt, tot (theoretisch) in het oneindige, dan is mijn oplossing eleganter.

Ik heb van het geheel een afbeelding gemaakt, bekijk het maar eens. Het is in ieder geval weer eens iets anders.

In de afbeelding zie je linksboven de recordset met waarden, waaronder ook die speciale waarden die je in je vraag noemt, linksonder de query die dat produceert en rechts de functie in een module die de waarden produceert.
 

Bijlagen

  • andersdaniif.jpg
    andersdaniif.jpg
    87,5 KB · Weergaven: 122
Laatst bewerkt:
Is het niet handiger om een tabel te creeeren met de mogelijke combinaties?
 
In dit geval zou ik de switch functie van VBA gebruiken.

Kijk maar eens in de help van access, daar staat ook een voorbeeld bij.
 
Switch !

Beste Bartuls,

Weer wat geleerd. Scheelt een hoop werk.

Code luidt nu:
---
Public Function ValueC_Switch(ValueA, ValueB)

  ValueC_Switch = _
    Switch( _
    ValueA = ValueB, 5, _
    ValueA = 5 And ValueB = 1, 5, _
    ValueA = 6 And ValueB = 2, 5, _
    ValueA = 5 And ValueB = 2, 4, _
    ValueA = 6 And ValueB = 1, 4, _
    True, 0 _
    )

End Function
---

De query:
---
SELECT WA, WB, ValueC([WA],[WB]) AS WC, ValueC_Switch([WA],[WB]) AS WC_2
FROM [tbl03-AlsOfGenesteIf];
---
 
Er zijn nog zoveel leuke functies in VB en VBA!
Het is alleen meestal een probleem om ze te vinden!
Ik ken er veel, maar nog lang niet allemaal, ik leer ook nog steeds bij.
 
bedankt

Alle meedenkers bedankt voor de mooie oplossingen.

Het leuke vind ik dat ik zelf helemaal geen VBA-kenner ben. Ik probeer altijd zoveel mogelijk binnen de standaardmogelijkheden op te lossen. Soms lukt me dat niet en moet ik dus om oplossingen vragen, zoals ik ook nu heb gedaan. Keer op keer blijkt dan dat vragen op verschillende manieren kunnen worden beantwoord. Ik leer daar verschrikkelijk veel van en zie (gelukkig) ook dat de echte VBA-kenners zelfs van elkaar kunnen leren.

Nogmaals bedankt.

Arno.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan