berekning maken

Status
Niet open voor verdere reacties.

baukjen

Gebruiker
Lid geworden
14 sep 2006
Berichten
275
berekening maken

is het mogelijk om in acces een berekening te maken?
invoerveld 22-10-1972 Knop 'bereken' naar één getal omzetten.
2+2+1+0+1+9+7+2=24 moet verkleinen naar één getal 2+4=6
dan zijn er 2 getallen 24 en 6 die samen één vormen namelijk 246.
op dat moment zal er een query moet zijn of een macro die verwijst naar een record met het getal 246
de content van dit record tonen.
puffff is dit mogelijk?
in excel heb ik wel een formule die dit doet. het lijk mij dat dit in acces ook zou moeten kunnen?

vriendelijke groet en alvast bedankt voor de reacties.
baukjen
:rolleyes:
 
Laatst bewerkt:
is het mogelijk om in acces een berekening te maken?
De vraag stellen is 'm beantwoorden, lijkt me. Natuurlijk kun je in Access berekeningen maken. Probleem is alleen: ik heb werkelijk geen flauw benul van wat je nu wilt doen. Dus ik zou zeggen: doe er in ieder geval een voorbeeldje bij. Zowel een database, als de door jou bejubelde Excel variant (;)). Want een berekening in Excel kun je niet zomaar overzetten naar een database, omdat je in Excel met allerlei kruisverwijzingen en tussencellen etc. kunt werken. In Access is dat allemaal wat strenger geregeld.
 
Om te beginnen: je formule in Excel kan een stuk korter. I.p.v.
Code:
=LINKS(B4;1) + RECHTS(LINKS(B4;2)*1) + RECHTS(LINKS(B4;3)*1) + RECHTS(LINKS(B4;4)*1) + RECHTS(LINKS(B4;5)*1) + RECHTS(LINKS(B4;6)*1) + RECHTS(LINKS(B4;7)*1) + RECHTS(LINKS(B4;8)*1)
Kun je ook volstaan met
Code:
=LINKS(B4;1)+DEEL(B4;2;1)+DEEL(B4;3;1)+DEEL(B4;4;1)+DEEL(B4;5;1)+DEEL(B4;6;1)+DEEL(B4;7;1)+DEEL(B4;8;1)
In Access kun je dat resultaat ook maken, met dezelfde functie. Die heet dan alleen MID. En je gebruikt een veldnaam (of in dit geval een Format functie om het datumveld te converteren). Dat ziet er dan zo uit, om je eerste getal te berekenen:
Code:
Totaal1: Val(Left(Format([Besteldatum];"ddmmyyyy";2;2);1))+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);2;1))+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);3;1))
+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);4;1))+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);5;1))+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);6;1))
+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);7;1))+Val(Mid(Format([Besteldatum];"ddmmyyyy";2;2);8;1))
En zo kun je de andere getallen dus ook berekenen.
Code:
Totaal2: IIf(Val(Left([Totaal1];1))+Val(Right([Totaal1];1))<10;[Totaal1] & Val(Left([Totaal1];1))+Val(Right([Totaal1];1));[Totaal1] &
Val(Left(Val(Left([Totaal1];1))+Val(Right([Totaal1];1));1))+Val(Right(Val(Left([Totaal1];1))+Val(Right([Totaal1];1));1)))
 
bedankt voor de heldere uitleg ik kan hiermee aan de slag

baukjen
:thumb:
 
Nog een aanvulling op de formules: zoals je kunt zien zijn ze best lang. Normaal gesproken kan de complete berekening makkelijk in één keer gedaan worden (in je Excel trouwens ook), maar je loopt dan tegen de limiet aan van het aantal tekens dat je in een veld kan zetten. Daarom heb ik er ook twee velden voor gemaakt.
In dit geval is het veel makkelijker om een aparte functie te maken die het resultaat in de query zet. Die functie is ook nog eens vrij makkelijk te maken. Zal daar zo nog een voorbeeldje voor posten.
 
super en bedankt voor het meedenken

hartelijke groet
Baukjen
:thumb:
 
Laatst bewerkt:
Hier dan de functie die je (volgens mij ook in Excel) kunt gebruiken. In een query zet je deze formule, gebaseerd op je datumveld, dus dat hoef je niet eerst te converteren naar tekst:
Code:
Expr9: Nummeren([Geboortedatum])
Je ziet: dat is al een heel stuk simpeler :). De eigenlijke functie is dan als volgt:
Code:
Function Nummeren(Datum As Date) As Integer
Dim sDatum As String
Dim i As Integer, iTot1 As Integer, iTot2 As Integer, iTot3 As Integer, sTot As String
    sDatum = Format([Datum], "ddmmyyyy", vbMonday, vbFirstFourDays)
    For i = 1 To Len(sDatum)
        iTot1 = iTot1 + Mid(sDatum, i, 1)
    Next i
    For i = 1 To Len(iTot1)
        iTot2 = iTot2 + Mid(iTot1, i, 1)
    Next i
    Select Case iTot2
        Case Is > 10
            For i = 1 To Len(iTot2)
                iTot3 = iTot3 + Mid(iTot2, i, 1)
            Next i
            sTot = iTot1 & iTot3
        Case Else
            sTot = iTot1 & iTot2
    End Select
    Nummeren = CInt(sTot)

End Function
Hierin wordt eerst de datum in een getalstring gezet zodat je 8 cijfers hebt.
Daarna wordt in een lus elk cijfer opgeteld in de variabele iTot. Dat getal moet je dan ook weer optellen, dus dat gebeurt in de lus met Tot2.
Tot2 moet dan weer gesplitst opgeteld worden als dat groter is dan 10, en daarvoor is de Select Case. Kan overigens ook met een IF, want zoveel elementen zijn er niet. Wat je wilt dus :).
Uiteindelijk wordt de totaaluitkomst in een tekststring samengevoegd op basis van Tot1 & Tot2 of Tot1 & Tot3.
Die string wordt dan uiteindelijk toegewezen aan de functie, want je wilt een getal teruglezen.
Je ziet dat de functie relatief simpel is, en voor je query ook wonderen doet qua tekstlengte :).
 
nog veel te leren

dat ziet er inderdaad een stuk eenvoudiger uit super.
voor mij echter nog wel ietwat zoeken daar ik geen ervaring heb met functies en bijna geen ervaring met macro's.
er is nog veel te leren op dit gebied.

ik zal zien hoe ik deze functie in acces kan aanbrengen.
je schrijft dat dit mogelijk ook in Excel gebruikt kan worden?
ik neem aan dat ik de code 2 via Alt-11 in het lege venster kan plaatsen?
moet ik dan een bepaalde cel in Excel de macro maken?

super bedankt en ik hou je op de hoogte als het mij gelukt is om dit werkende te krijgen.
hartelijke groet.
Baukjen
:thumb:
 
In Excel moet je de functie in een module plakken, in Access ook. In Excel doe je dat met <Alt>+<F11>, in Access ook. In Excel moet je via <Invoeren>, <Module> een module maken (als je die nog niet hebt), in Access ook. Kortom: meer overeenkomsten dan verschillen :). Zelfs het gebruik zou niet uit mogen maken; in Excel zet je de formule in een lege cel en verwijs je naar een cel, in Access zet je de formule in een leeg veld in een query.
In Excel krijg je dan dit als formule: =nummeren(A5)
 
Laatst bewerkt:
reactie op #11. goedendag OctaFish het is gelukt om het toe te passen op acces. in excel nog niet. dit komt misschien omdat ik niet helemaal door heb wat te doen in het werkblad.
ik blijf zoeken en uittesten

hartelijke groet
baukjen
:)
 
Ik de functie in een nieuwe module in Excel geplakt, en de formule zoals in bericht #11 staat in een cel gezet. En dat werkte. Als je er niet uitkomt, zet ik vanavond de Excel wel even online.
 
reactie op #14. ik stel dit op prijs want kom er niet uit.
bedankt en hartelijke groet
baukjen
:rolleyes:
 
Ik heb 'm maar even aangepast in je oorspronkelijke bestand. Kijk maar of je er wat aan hebt!
 

Bijlagen

  • ExelAcces.xlsm
    14,5 KB · Weergaven: 17
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan