ich hatte vor ei paar Tagen schon mal das Problem, einen durchschnitt in einer abfrage zu bilden. dank eurer Hilfe ist mir das geglückt.
Jetzt hab ich nur noch ein Problem:
In der abfrage habe ich insgesamt 10 Spalten, aus denen der Durchschnitt gebildet werden soll. Es kommt jedoch auch vor, dass einige Felder Null sind. Dann kann ich die nicht mit in den Durchschnitt einrechnen. Wie bekomme ich das hin, dass die Abfrage die Null- Felder nicht mit dividiert?
Vielen Dank für eure Hilfe im Voraus und viele Grüße aus der verschneiten Oberlausitz sendet Beate
am Besten erstellst Du eine Public-Funktion, die die Felder entspr. behandelt/bestimmt und den Durchschnitt als Wert zurückliefert.
Diese Funktion setzt Du in der Abfrage anstelle der vorgeschlagenen Berechnungen ein.
Mein „AusnahmeFall #2“ dürfte hier wohl greifen:
falls
– die Runden-Funktionaltität der Format-Funktion Dir mathematisch genügt (und hier auf eine Nachkommastelle eingestellt ist)
– der Divisor immer die Anzahl der benutzten Felder, auch wenn sie leer sind, sein darf/muß,
– bei zusätzlichen Feldern diese syntaktisch richtig und mit angepaßter Divisorzahl (–> Anzahl der Felder) eingebaut werden.
Wenn Du noch die Namen aller betroffenen Felder posten würdest, könnte ich vielleicht auch mit einem Code für die Funktion dienen…
da musst du dir eine Funktion schreiben, die das berechnet:
Public Function Zähl_Spalten()
Zähl_Spalten = 0
if not isnull([mathematik]) then Zähl_Spalten = Zähl_Spalten +1
if not isnull([deutsch]) then Zähl_Spalten = Zähl_Spalten +1
if not isnull([englisch]) then Zähl_Spalten = Zähl_Spalten +1
usw.
End Function
Diese Function nutzt du dann als Divisor. Siehe Beispiel:
Diese Funktion nutzt du dann als Divisor. Siehe Beispiel: Durchschnitt: (NZ([Deutsch],0)+NZ([Bio],0)+NZ([Chemie],0)+NZ([Mathe],0))/Zähl_Spalten()
aber wenn du sowieso eine Funktion schreibst, kannst du eigentlich auch alles in diese reinpacken.
Public Function Durchschnitt_Noten()
Dim Zähl_Spalten
Zähl_Spalten = 0
if not isnull([mathematik]) then Zähl_Spalten = Zähl_Spalten +1
if not isnull([deutsch]) then Zähl_Spalten = Zähl_Spalten +1
if not isnull([englisch]) then Zähl_Spalten = Zähl_Spalten +1
usw.
vielen Dank für deine schnelle Antwort.
Ich glaube ich bin kurz vor der Lösung. Beim Anzeigen der Abfrage kommt ein fehler in der Function: „Fehler beim Kompilieren: externer name nicht definiert“ In der Function springt der Cursor dann auf das erste Fach, im beispiel „deutsch“
Woran kann das liegen und wie kann ich das beheben?
In ein Standardmodul (Datenbankfenster/Module) die folgende Funktion kopieren:
Public Function fktCalCAvg(ParamArray w()) As Double
Dim i As Long, i1 As Long, Res As Double
If UBound(w)
und z. B.: in der Abfrage in einer berechneten Spalte:
Feld: Notendurchschnitt: fktCalCAvg([Deutsch],[Englisch],[Geschichte],[Informatik],[Geografie])
Viele Grüße vom Bodensee
Franz , DF6GL
PS: Feedback erwünscht!