Alcoholtest in excel (vb)
Moderators: ArcherBarry, Fuzzwood
- Berichten: 768
Alcoholtest in excel (vb)
Ik moet dus voor informatica een programmaatje maken in excel (VB). Daarvoor heb ik de formule voor de alcoholtest nodig. Weet iemand die formule?
ik heb deze:
BAG (a x 10)/(g x r) - (u - 0,5) x (g x 0,002)
Verklaring:
a = aantal glazen
g = lichaamsgewicht
r = bij mannen 0,7 en bij vrouwen 0,5 u = het aantal uren vanaf het eerste glas
u = het aantal uur je gedroken hebt
ik heb dus dit als code:
Sub Alcoholtest()
Dim Gewicht As Double
Dim Glazen As Double
Dim Geslacht As Double
Dim uren As Double
Dim Uitkomst As Double
Geslacht = InputBox("Vul voor man 0.7 of voor een vrouw 0.5 in.")
Glazen = InputBox("vul hier het aantal glazen in.")
uren = InputBox("Hoeveel uur is het geleden dat je begonnen bent met drinken?")
Gewicht = InputBox("Vul hier je gewicht in")
Uitkomst = (Glazen * 10) / (Gewicht * Geslacht) - (uren - 0.5) * (Gewicht * 0.002)
MsgBox "Beste" & Uitkomst & " dit is het"
End Sub
Maar ik kom steeds een negatief getal uit.
Waarschijnlijk is dat niet moeilijk, maar wij hebben geen cursus informatica, wat ik dus zeer jammer vind.
ik heb deze:
BAG (a x 10)/(g x r) - (u - 0,5) x (g x 0,002)
Verklaring:
a = aantal glazen
g = lichaamsgewicht
r = bij mannen 0,7 en bij vrouwen 0,5 u = het aantal uren vanaf het eerste glas
u = het aantal uur je gedroken hebt
ik heb dus dit als code:
Sub Alcoholtest()
Dim Gewicht As Double
Dim Glazen As Double
Dim Geslacht As Double
Dim uren As Double
Dim Uitkomst As Double
Geslacht = InputBox("Vul voor man 0.7 of voor een vrouw 0.5 in.")
Glazen = InputBox("vul hier het aantal glazen in.")
uren = InputBox("Hoeveel uur is het geleden dat je begonnen bent met drinken?")
Gewicht = InputBox("Vul hier je gewicht in")
Uitkomst = (Glazen * 10) / (Gewicht * Geslacht) - (uren - 0.5) * (Gewicht * 0.002)
MsgBox "Beste" & Uitkomst & " dit is het"
End Sub
Maar ik kom steeds een negatief getal uit.
Waarschijnlijk is dat niet moeilijk, maar wij hebben geen cursus informatica, wat ik dus zeer jammer vind.
Het Wetenschapsforum heeft ook een facebook pagina!
-
- Berichten: 1.116
Re: Alcoholtest in excel (vb)
Dit kan op twee manieren ontstaan: Je noemer is negatief of het deel wat er afgetrokken wordt is groter dan de deling.Maar ik kom steeds een negatief getal uit.
Heb je het al nagerekend op je rekenmachine o.i.d. of er überhaupt wel een goed antwoord uit komt? Anders moet je eens kijken of je type-juggling gewoon niet verkeerd is (Misschien moet je CDouble o.i.d. gebruiken op die InpubBox, deze levert volgens mij namelijk Strings aan). Evt. kun je ook Application.InputBox gebruiken, dan kun je met het argument Type zelf bepalen welk type het moet worden.
Overigens, je kunt een stuk sneller/korter programmeren in VBA met het gebruik van het volgende:
$ A string
% An integral value between -32768 and 32767
& An integer of small or large scale
! A decimal number with single precision
# A decimal number with double precision
@ A monetary value
Code: Selecteer alles
Sub AlcoholTest()
dGeslacht# = InputBox("Vul voor man 0.7 of voor een vrouw 0.5 in")
dGlazen# = InputBox("Vul hier het aantal glazen in")
dUren# = InputBox("Hoeveel uur is het gelden dat je begonnen bent met drinken?")
dGewicht# = InputBox("Vul hier je gewicht in")
dUitkomst# = (dGlazen * 10)/(dGewicht *dGeslacht) - (dUren - .5) * (dGewicht * .002)
End Sub
- Berichten: 768
Re: Alcoholtest in excel (vb)
Kan je ene iets makkelijker antwoord geven? Ik zeg he je, we krijgen geen cursus informatica.
Het Wetenschapsforum heeft ook een facebook pagina!
- Berichten: 2.609
Re: Alcoholtest in excel (vb)
Het probleem zit hem mogelijk niet in het informatica gedeelte.
Heb je al eens geprobeerd van de waardes gewoon op een excel werkblad uit te rekenen? Het kan goed zijn dat je formule gewoon niet klopt.
Wat hierboven staat zou ik trouwens ook afraden qua programmeerstijl. Het is 'beter' om al de variabelen netjes te definieren zoals jij doet.
Heb je al eens geprobeerd van de waardes gewoon op een excel werkblad uit te rekenen? Het kan goed zijn dat je formule gewoon niet klopt.
Wat hierboven staat zou ik trouwens ook afraden qua programmeerstijl. Het is 'beter' om al de variabelen netjes te definieren zoals jij doet.
- Berichten: 6.905
Re: Alcoholtest in excel (vb)
Dat zal het probleem niet zijn. Normaal zit vba dat als double tenzij het effectief een string is dan komt er wel een error.Heb je het al nagerekend op je rekenmachine o.i.d. of er überhaupt wel een goed antwoord uit komt? Anders moet je eens kijken of je type-juggling gewoon niet verkeerd is (Misschien moet je CDouble o.i.d. gebruiken op die InpubBox, deze levert volgens mij namelijk Strings aan).
Korter maar geen stijl dus:JWvdVeer schreef:Overigens, je kunt een stuk sneller/korter programmeren in VBA met het gebruik van het volgende:
...
Wat hierboven staat zou ik trouwens ook afraden qua programmeerstijl. Het is 'beter' om al de variabelen netjes te definieren zoals jij doet.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
- Berichten: 2.609
Re: Alcoholtest in excel (vb)
Oké ik heb de moeite genomen om het eens na te kijken voor je.
Ik heb je code aangepast naar het volgende:
CDbl maakt van eender welke waarde een Double en CStr hetzelfde maar dan voor een String. Dit is niet nodig, maar het is een goede gewoonte om die stijl aan te nemen. VBA is een brave programmeertaal die gewoon alles aanneemt, maar andere talen die veel gebruikt worden zijn daar strikter in.
Wat ik dus heb gedaan is alle waarden die je invoert eens uitprinten om te zien hoe die juist in het geheugen geschreven worden. Nu blijkt dat "0.7" wordt weggeschreven als 7. Dit komt omdat mijn Excel de komma gebruikt als decimaalteken. Als ik "0,7" invul werkt het programma perfect. Ik vermoed dat dit ook jouw probleem is, maar dit hangt van computer tot computer af.
Doordat de massa in de 1ste term met iets groot vermenigvuldigd werd, werd die term kleiner dan de 2de, waardoor je dus een negatieve uitkomst kreeg.
De volgende code werkt rond dat probleem door te vragen of de persoon een man of een vrouw is. Je vult dan het geslacht in en op basis daarvan kiest het programma tussen 0.7 of 0.5.
Ik heb je code aangepast naar het volgende:
Code: Selecteer alles
Sub Alcoholtest()
Dim Gewicht As Double
Dim Glazen As Double
Dim Geslacht As Double
Dim uren As Double
Dim Uitkomst As Double
Geslacht = CDbl(InputBox("Vul voor man 0.7 of voor een vrouw 0.5 in."))
MsgBox (Geslacht)
Glazen = CDbl(InputBox("vul hier het aantal glazen in."))
MsgBox (Glazen)
uren = CDbl(InputBox("Hoeveel uur is het geleden dat je begonnen bent met drinken?"))
MsgBox (uren)
Gewicht = CDbl(InputBox("Vul hier je gewicht in"))
MsgBox (Gewicht)
Uitkomst = (Glazen * 10) / (Gewicht * Geslacht) - (uren - 0.5) * (Gewicht * 0.002)
MsgBox (CStr(Uitkomst))
End Sub
Wat ik dus heb gedaan is alle waarden die je invoert eens uitprinten om te zien hoe die juist in het geheugen geschreven worden. Nu blijkt dat "0.7" wordt weggeschreven als 7. Dit komt omdat mijn Excel de komma gebruikt als decimaalteken. Als ik "0,7" invul werkt het programma perfect. Ik vermoed dat dit ook jouw probleem is, maar dit hangt van computer tot computer af.
Doordat de massa in de 1ste term met iets groot vermenigvuldigd werd, werd die term kleiner dan de 2de, waardoor je dus een negatieve uitkomst kreeg.
De volgende code werkt rond dat probleem door te vragen of de persoon een man of een vrouw is. Je vult dan het geslacht in en op basis daarvan kiest het programma tussen 0.7 of 0.5.
Code: Selecteer alles
Sub Alcoholtest()
Dim Gewicht As Double
Dim Glazen As Double
Dim Geslacht As String
Dim r As Double
Dim uren As Double
Dim Uitkomst As Double
Geslacht = CDbl(InputBox("Vul je geslacht in: man of vrouw"))
If Geslacht = "man" Then
r = 0.7
Else
r = 0.5
End If
Glazen = CDbl(InputBox("vul hier het aantal glazen in."))
uren = CDbl(InputBox("Hoeveel uur is het geleden dat je begonnen bent met drinken?"))
Gewicht = CDbl(InputBox("Vul hier je gewicht in"))
Uitkomst = (Glazen * 10) / (Gewicht * r) - (uren - 0.5) * (Gewicht * 0.002)
MsgBox (CStr(Uitkomst))
End Sub
-
- Berichten: 1.116
Re: Alcoholtest in excel (vb)
Tja, ieder z'n smaak. Zelf gebruik ik het redelijk vaak. Mede omdat ik persoonlijk meer talen als Java, C# en PHP gewend ben, waarbij je declareren en waarde toekennen in één keer doet. Maar ik kan er heel goed mee leven als je een andere manier beter vindt.Wat hierboven staat zou ik trouwens ook afraden qua programmeerstijl. Het is 'beter' om al de variabelen netjes te definieren zoals jij doet.
Niet mee eens dusKorter maar geen stijl dus:
Je zou natuurlijk met MsgBox ook tussentijds even voor alle andere variabelen kunnen checken of er de goede waarden in zitten (ofwel: of er in staat wat je ingevoerd hebt).
Overigens zou ik hier een formulier van maken en geen inputboxen. Het voordeel van een formulier is dat fouten door VBA zelf al afgevangen worden (je kunt bij input-boxen zelf aangeven wat voor waarden je verwacht (getal, tekst, e.d.) en tevens in welke range ze mogen liggen).
Het grote probleem met VBA vind ik persoonlijk is dat je zo weinig mogelijkheden hebt om fouten af te vangen. En op deze manier los je dat redelijk elegant op.
Heb je overigens al geprobeerd of de formule klopt, zoals er nu al drie personen in dit topic aangeven?
- Berichten: 2.609
Re: Alcoholtest in excel (vb)
Heb je overigens al geprobeerd of de formule klopt, zoals er nu al drie personen in dit topic aangeven?
De formule klopt. Oplossing staat in post #6
-
- Berichten: 1.116
Re: Alcoholtest in excel (vb)
Dat zal het probleem niet zijn. Normaal zit vba dat als double tenzij het effectief een string is dan komt er wel een error.
Dat was dus waarschijnlijk wel het probleem. Een reden te meer om er gewoon een formulier van te maken. In een formulier zou je dit zien wanneer je van het ene veld naar het andere veld springt. Sowieso denk ik dat het goed is om hier radio's van te maken in dit geval.Wat ik dus heb gedaan is alle waarden die je invoert eens uitprinten om te zien hoe die juist in het geheugen geschreven worden. Nu blijkt dat "0.7" wordt weggeschreven als 7. Dit komt omdat mijn Excel de komma gebruikt als decimaalteken. Als ik "0,7" invul werkt het programma perfect. Ik vermoed dat dit ook jouw probleem is, maar dit hangt van computer tot computer af.
- Berichten: 768
Re: Alcoholtest in excel (vb)
@ Xenion
Ik heb die CDbl() weg gedaan in de code en ik heb CStr() in de plaats gezet omdat je zei dat CStr() voor een string was en Geslacht is een string. Er is 1 probleempje. Als ik 5 glazen, 1 uur, 70 kg en man invul, dan kom ik in excel aan 0.95... en op mijn rekenmachine op 1,1....
Ik heb die CDbl() weg gedaan in de code en ik heb CStr() in de plaats gezet omdat je zei dat CStr() voor een string was en Geslacht is een string. Er is 1 probleempje. Als ik 5 glazen, 1 uur, 70 kg en man invul, dan kom ik in excel aan 0.95... en op mijn rekenmachine op 1,1....
Het Wetenschapsforum heeft ook een facebook pagina!
- Berichten: 2.609
Re: Alcoholtest in excel (vb)
Aja, das een foutje dat ik nog had laten staan. Er stond origineel nog iets anders, maar ik heb uiteindelijk dit gekozen. Er moet zelfs geen CStr() staan omdat het al een String is.Ik heb die CDbl() weg gedaan in de code en ik heb CStr() in de plaats gezet
Als ik de formule gewoon uitreken kom ik ook 0.95 uit, dus VB berekent het wel juist hoor. Ik weet niet met wat voor rekenmachine je werkt, maar je moet wel zien dat de haakjes enzo juist staan.