Zoekwerk in query

Status
Niet open voor verdere reacties.

Japsur

Gebruiker
Lid geworden
9 apr 2004
Berichten
650
Hallo,

Een andere vraag over dezelfde excelformule:

=ALS(OF(B32="Mw.";B32="Hr.");ALS(B32="Mw.";ALS(JAAR(VANDAAG())-JAAR(H32)<20;ALS(VANDAAG()< DATUM(JAAR(VANDAAG());11;1);VERT.ZOEKEN(JAAR(VANDAAG())-JAAR(H32);Categorieën!$A$101:$C$200;3;ONWAAR);VERT.ZOEKEN(JAAR(VANDAAG())-JAAR(H32)-1;Categorieën!$A$101:$C$200;3;ONWAAR));VERT.ZOEKEN(AFRONDEN.NAAR.BENEDEN((JAAR(VANDAAG())+MAAND(VANDAAG())/12+DAG(VANDAAG())/365)-(JAAR(H32)+MAAND(H32)/12+DAG(H32)/365);0);Categorieën!$A$101:$C$200;3;ONWAAR));ALS(JAAR(VANDAAG())-JAAR(H32)<20;ALS(VANDAAG()< DATUM(JAAR(VANDAAG());11;1);VERT.ZOEKEN(JAAR(VANDAAG())-JAAR(H32);Categorieën!$A$1:$C$100;3;ONWAAR);VERT.ZOEKEN(JAAR(VANDAAG())-JAAR(H32)-1;Categorieën!$A$1:$C$100;3;ONWAAR));
VERT.ZOEKEN(AFRONDEN.NAAR.BENEDEN((JAAR(VANDAAG())+MAAND(VANDAAG())/12+DAG(VANDAAG())/365)-(JAAR(H32)+MAAND(H32)/12+DAG(H32)/365);0);Categorieën!$A$1:$C$100;3;ONWAAR)));"titel fout")

Hierin staat vaak vert. zoeken. Nu wou ik dat ook doen met DLookup, ik denk van eitje doe ik even, maar nee, hij wil het maar nie vinden.

Wat heb ik: een tabel met een boel gegegevens, o.a. de leeftijd. Aan elke leeftijd behoort een categorie, bijv. V35 of M50 of JpC. Nu had ik buiten deze tabel om nog 2 tabellen gemaakt, 1 voor mannen en 1 voor vrouwen. Hierin staat praktisch het zelfde: kolom 1: Leeftijd van 1 t/m 100, kolom 2: geslacht (niet echt belangrijk) en kolom 3: categorie > JpC, JpB etc. De leeftijd hoort echt bij de categorie.
Nu had ik het volgende ingevuld bij DLookup:
DLookUp(Year(Date())-Year([Gebdat]);" [Categorieën mannen]";"[Categorieën mannen]![Categorie]")

Dus bijv. als iemand 38 is en man, moet er bij hem M komen te staan van Mannen.
Is er een vrouw van 42, dan moet het V40 worden etc etc.

Kan iemand mij hiermee helpen?
Alvast bedankt
 
DFirst("Categorie", "Categorieën mannen", "Leeftijd = " & cStr(Year(Date())-Year(me![Gebdat])))

Hierbij ben ik ervanuit gegaan dat Gebdat een veld op je formulier is.
 
als ik jouw vraag goed begrijp wil jij op basis van de leeftijd en geslacht een selectie maken. ik denk dat dit bij uitstek geschikt is voor een "select case" methode is.
even kijken in je helpfile hoe dit precies werkt maar is een verbeterde if the else statement.
bv
select case
case 1 procedure 1
case 2 procedure 2
case 3 procedure 3
end
succes
 
volgens mij de correcte syntax

dim strreportname as string
select case me.landvrm
case 1
strreportname = "rapportnederland"
case 2
strreportname = "rapportBelgie
.
.
.
end select

docmd.openreport strreportname...........

succes
gost :thumb:
 
Bartuls > Geniaal, dit zocht ik. Wist niet eens dat er zo'n functie bestond in access. Weer wat geleerd.
Gostdog, van jou aanpak snap ik helaas geen snars, sry.

Nu heb ik alleen nog een vraagje over dit gedeelte:
VERT.ZOEKEN(AFRONDEN.NAAR.BENEDEN((JAAR(VANDAAG())+MAAND(VANDAAG())/12+DAG(VANDAAG())/365)-(JAAR(H32)+MAAND(H32)/12+DAG(H32)/365);0);Categorieën!$A$1:$C$100;3;ONWAAR)));"titel fout")

Deze is me ook gelukt, dankzij Bartuls.
Maar hoe werk ik een schrikkeljaar weg. Want 1x per 4 jaar zit ik er een dag naast. Zou ik dan moeten delen door 365,25?? Of moet ik iets anders toepassen, hij ziet er nu uit:
DFirst("Categorie";"Categorieën mannen";"Leeftijd = " & CStr((Int((Year(Date())+Month(Date())/12+Day(Date())/365)-(Year([Gebdat])+Month([Gebdat])/12+Day([Gebdat])/365)))))
 
Nu heb ik um af, maar hij werkt op de een of andere vage manier niet goed helaas.
iemand die bijv. 49 is wordt al bij M50 geplaatst terwijl deze nog bij M45 behoort.
Heb de complete formule als volgt, het laatste gedeelte is misschien wat omslachtig, maar ik wou een berichtvenster, wou nie lukken omdat het dan te ingewikkeld was voor access op de een of andere manier:

Expr4: IIf([Titel]="Mw." Or [Titel]="Hr.";IIf([Titel]="Mw.";(IIf(DateDiff(("yyyy");([Gebdat]);Date()<20);(IIf(Format$(Date();"mmd")<"111";(DFirst("Categorie";"Categorieen vrouwen";"Leeftijd = " & CStr(Year(Date())-Year([Gebdat]))));(DFirst("Categorie";"Categorieen vrouwen";"Leeftijd =" & CStr(Year(Date())-(Year([Gebdat]-1)))))));(DFirst("Categorie";"Categorieen vrouwen";"Leeftijd = " & CStr((Int((Year(Date())+Month(Date())/12+Day(Date())/365)-(Year([Gebdat])+Month([Gebdat])/12+Day([Gebdat])/365))))))));(IIf(DateDiff(("yyyy");([Gebdat]);Date()<20);(IIf(Format$(Date();"mmd")<"111";(DFirst("Categorie";"Categorieën mannen";"Leeftijd = " & CStr(Year(Date())-Year([Gebdat]))));(DFirst("Categorie";"Categorieën mannen";"Leeftijd =" & CStr(Year(Date())-(Year([Gebdat]-1)))))));(DFirst("Categorie";"Categorieën mannen";"Leeftijd = " & CStr((Int((Year(Date())+Month(Date())/12+Day(Date())/365)-(Year([Gebdat])+Month([Gebdat])/12+Day([Gebdat])/365)))))))));(IIf([Titel]=Not "Mw." Or "Hr.";"Titelfout";"")))

Kan iemand hier iets uit wijs worden zodat hij iemand van 49 wel indeelt bij M45 en niet bij M50. Dit zijn mensen die dit jaar overgaan naar een andere categorie, die vindt plaats op de dag dat ze jarig zijn. Bij mensen onder de 20 jaar is dat niet het geval, dit gaat per 1 nov. (111 in de formule)

Tevens werkt de 1 nov. niet. Iedereen beneden de 20 jaar verandert per 1 nov. van categorie. Als ik m'n systeemtijd wijzig in bijv. 19 nov. blijft iedereen gewoon zoals ie was.
 
Laatst bewerkt:
Ik ga die excel brei niet uitzoeken.
Wel wil ik je het volgende advies geven.
Stop met het zelf rekenen!
Maak gebruik van de geweldige functies die Microsoft daarvoor beschikbaar stelt!
Kijk maar eens in de help naar functies als DateDiff(), DateAdd() etc.
Met deze functies kun je je schrikkeljaar probleem oplossen, je kunt een correcte leeftijdsberekening uitvoeren etc.
Deze functies kun je overigens ook in Excel gebruiken, daar zijn formules zoals je die gepost hebt ook echt niet nodig!
 
Ik heb het helemaal nagelopen, er stonden wat haakjes fout, vandaar die fouten...
Vraag = opgelost!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan