Hallo
du könntest...
- Für jeden Datensatz
- ... Lese die 10 Werte in ein Array
- ... Sortiere dieses Array
- ... Addiere die höchsten 5 Werte
- ... Schreibe das Ergebnis in das Zielfeld
Beispiel: Eine Methode könnte so aussehen:
Public Sub SetBestOf(anzahl As Integer)
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("select * from Tabelle1")
Do While Not rs.EOF
Dim summeBeste As Integer
Dim values(9) As Integer
values(0) = rs!Feld1
values(1) = rs!Feld2
values(2) = rs!Feld3
values(3) = rs!Feld4
values(4) = rs!Feld5
values(5) = rs!Feld6
values(6) = rs!Feld7
values(7) = rs!Feld8
values(8) = rs!Feld9
values(9) = rs!Feld10
summeBeste = Sortiere(values, anzahl)
rs.Edit
rs!Bester = summeBeste
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Das Beispiel bezieht sich auf eine Tabelle mit dem Namen "Tabelle1" und mit den numerischen Spalten "Feld1" bis "Feld10" und "Bester" für die Ergebnisse. Namen und den konkreten Spalten-Typ müsstest du also ggf. anpassen.
Da bliebe noch die Frage nach der Sortierung. Hier könnte man einen an den Bubble-Sort angelehnten Algorithmus nehmen, andere gehen bestimmt auch (bei 10 Datenpunkten ist dieser aber ok):
Function Sortiere(ByRef werte() As Integer, anzahl As Integer) As Integer
Dim tmp As Integer
Dim n As Integer
Dim i As Integer
n = UBound(werte)
For i = 0 To anzahl - 1
For j = i + 1 To n
If werte(i) < werte(j) Then
tmp = werte(j)
werte(j) = werte(i)
werte(i) = tmp
End If
Next j
Next i
' Summe der "bestOf" bilden:
n = 0
For i = 0 To anzahl - 1
n = n + werte(i)
Next
' Ergebnis zurückgeben...
Sortiere = n
End Function
Der erste Parameter übernimmt (byref) das Zahlenarray, der zweite Parameter ist die Anzahl der besten Zahlen, die verwendet werden sollen, in deinem Fall also die 5.
Der Aufruf wäre dann:
Call SetBestOf(5)
Gruß