Gemiddelde berekenen

Status
Niet open voor verdere reacties.

Access2010

Gebruiker
Lid geworden
10 feb 2011
Berichten
116
Forum,

In een simpel analysemodel moet enegemiddelde berekend worden. Dat is op zich niet zo moeilijk aantal [Velden]optellen en delen door het aantal.

[Veld1]+[Veld2]+[Veld3]/3

Maar al nu er maar 2 van de 3 velden gevuld worden, dan klopt het niet meer. Voor een analyse niet echt goed.

E.e.a. is niet aan een query of tabel gekoppeld. Het is een rekenformulier om snel inzicht te krijgen. Uitkomst wordt niet opgeslagen.

Dank,

Access2010
 
Je wilt dus alleen een gemiddelde als er iets is ingevuld in een veld? Of wil je dat bij een leeg veld de waarde 0 wordt ingevuld?
 
Het gemiddelde als er niets is ingevuld. Het kan voorkomen dat er van de 5 jaren maar bijv. 3 bekend zijn.

Accesss2010
 
Dit lijkt me een kwestie van: Als groter dan nul, dan optellen bij andere velden groter dan nul, dan delen door aantal velden groter dan nul.
 
En wat wordt dan de juiste formule??

=[Tekst0]+[Tekst2]+[Tekst4]+[Tekst6]+[Tekst8])/5

Access2010
 
Waarom gebruik je de functie GEM niet? Die houdt geen rekening met lege velden.
 
Dat probeerde ik al, maar als je dan niets invult dan gebeurd er dus niets. Ook telt Access niet meer op.

Access2010
 
Ik zou de berekening ook in de query doen, niet op het formulier.
 
Ik sla niets op in een tabel. Kan dus ook geen query maken. Zie het als een kladblokje die via een pop up formulier je helpt analyseren zonder gebruik te maken van getallen uit een tabel.

Misschien is de oplossing een tabel maken? Hoeft nergens aan gekoppeld te worden en bevat alleen deze velden en een aantal schadebedrag velden.



Access2010
 
Als de functie Gem (of Avg in het Engels) gebruikt wordt om een gemiddelde over meerdere velden uit te rekenen, retourneert deze Null op het moment dat minstens 1 Null waarde wordt gevonden.
Gaat dus niet werken.

Alternatief is om een zelfdegedefinieerde functie te schrijven.

Tardis
 
Met Nz([Tekstveld1];0) kun je null waarden nog wel omzeilen, maar met een functie kan het ook:
Bijvoorbeeld zoiets...

Code:
Private Sub Form_Current()
Dim i As Integer, iCount As Integer, iTot As Double

iCount = 0
iTot = 0

For i = 1 To 3
    If Nz(Me("Veld" & i), "") <> "" Then
        If IsNumeric(Me("Veld" & i)) Then
            iCount = iCount + 1
            iTot = iTot + Me("Veld" & i)
        End If
    End If
Next i
Me.txtGem = iTot / iCount

End Sub
 
Laatst bewerkt:
In je formulier; hij staat dan bij de gebeurtenis <Bij Aanwijzen>.
 
Gedaan en geeft een compileerfout. De fout zit vlgs. Access in Me.txtGem

De code heb ik in het formulier gezet, maar (domme vraag en dus de lachers mogen nu hun gang gaan) hoe weet access nu waar e.e.a. moet staan. Normaal zet je de code toch in de eigenschappen van het veld.

Access2010
 
En wat zou txtGem moeten zijn? Heb je überhaupt wel een tekstvak met die naam?
 
Je kunt een aparte functie gebruiken voor de berekening. Die ziet er dan zo uit:

Code:
Function TekstGem() 
Dim i As Integer, iCount As Integer, iTot As Double

iCount = 0
iTot = 0

For i = 1 To 5
    If Nz(Me("Veld" & i), "") <> "" Then
        If IsNumeric(Me("Veld" & i)) Then
            iCount = iCount + 1
            iTot = iTot + Me("Veld" & i)
        End If
    End If
Next i
TekstGem = iTot / iCount
End Function

Op een willekeurig tekstveld zet je dan als Besturingselementbron: =TekstGem()

Overigens heb je in je oorspronkelijke formule (=[Tekst0]+[Tekst2]+[Tekst4]+[Tekst6]+[Tekst8])/5) geen consequente naamgeving die je zo kunt gebruiken in de functie; die zou je dus moeten aanpassen. Mooier (en beter) is uiteraard om de tekstvelden te hernoemen...
 
Wederom als altijd dank voor d einput.

De functie zet ik ook <bij aanwijzen>?? Ik kreeg de melding #Naam? in het vak waarin ik =Tekst(Gem) weergaf. Vlgs. access moet dat =Tekst([Gem]) zijn. Maar het werkt allemaal (nog) niet.

Access2010
 
De functie heet TekstGem, dus dat moet echt wel zoals ik 'm heb neergepend. Wat ik niet weet, is hoe jouw velden heten die je gebruikt voor de berekening. In je eerdere voorbeeld zat daar wel een constante in (=([Tekst0]+[Tekst2]+[Tekst4]+[Tekst6]+[Tekst8]) maar persoonlijk zou ik de naamgeving toch enigszins fatsoeneren, zodat je berekening wat makkelijker gaat werken. Zoals ik in mijn functie dus heb gedaan.
Wil je toch jouw veldnamen gebruiken, dan ziet de functie er zo uit:

Code:
Function TekstGem() 
Dim i As Integer, iCount As Integer, iTot As Double

iCount = 0
iTot = 0

For i = 1 To 10 Step 2
    If Nz(Me("Veld" & i), "") <> "" Then
        If IsNumeric(Me("Veld" & i)) Then
            iCount = iCount + 1
            iTot = iTot + Me("Veld" & i)
        End If
    End If
Next i
TekstGem = iTot / iCount
End Function

Maak er anders een voorbeeldje van; dat werkt heel wat sneller :)
 
Ga eens aan de slag. Het gekke is dat als ik een gebeurtenissenprocedure maak e.e.a. niet opslaat. Eerst maar eens op vakantie en dan daarna eens kijken.

Dat e.e.a. soms niet geheel correct volgens de "regels"wordt weergegeven is omdat ik in een voortschrijdende database oefen en dan is een weg terug soms lastig.

Access2010
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan