Feldsortierung auf Datensatzebene

Hallo,

ich möchte auf Datensatzebene mit einer Abfrage, eine Sortierreihenfolge festlegen(Beispiel ist die Lottozahlenziehung, die mir die Zahlen in gezogener Reihenfolge ausgibt, der Wunsch wäre aufsteigend). Wie kann ich das mit einer Funktion bewerkstelligen etwa schon beim Einlesen der Daten?

Für Tipps wäre ich sehr dankbar

Gruß shortiman

Hallo,

ich möchte auf Datensatzebene mit einer Abfrage, eine
Sortierreihenfolge festlegen(Beispiel ist die
Lottozahlenziehung, die mir die Zahlen in gezogener
Reihenfolge ausgibt, der Wunsch wäre aufsteigend). Wie kann
ich das mit einer Funktion bewerkstelligen etwa schon beim
Einlesen der Daten?

versteh das nicht… Was willst Du nun: eine aufsteigende Sortierung, oder die Reihenfolge, wie die Zahlen gezogen wurden?
Wie werden die Zahlen denn eingegeben?

Weiterhin ist sowas ohne aufwändige Rechnerei per VBA nicht möglich, wenn die 6 (oder mehr) Zahlen sich für eine Ziehung im einem und demselben DS befinden (à la Ziehungsnummer, Woche,Zahl1,Zahl2,Zahl3…)

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo shortiman,

es ist nun mal so, dass Datenbanken wohl vertikal aber nicht horizontal arbeiten.

D.h. es wäre sinnvoll eine Tabelle entsprechend zu erstellen:
Felder: Ziehung(Datum) und Zahl(Zahl)
So kannst du nach Ziehung und Zahlen sortieren.

Horizontal bedeutet: sehr gute VBA Kenntnisse:

Man erstellt ein Array und füllt es mit den Daten die sortiert werden sollen:

Sub QuickSort(ByRef sArray As Variant, ByVal MinElem As Long, ByVal MaxElem As Long)
'
' QuickSort()
'
' Sortieren eines Arrays mit dem QuickSort-Algorithmus, dem wohl schnellsten
' Sortieralgorithmus von Welt.
'
' IN: sArray Array das sortiert werden soll
' MinElem erstes Element des Arrays (oder Teil-Arrays)
' MaxElem letztes Element des Arrays (oder Teil-Arrays)
'
Dim Mitte As Long
Dim vDummy As Variant
Dim I As Long, j As Long
 '
 ' Abbruchbedingung der Rekursion prüfen
 '
 If MinElem \> MaxElem Then
 '
 ' Rekursion beenden
 '
 Exit Sub
 End If
 '
 ' Ermittlung der Mitte des Arrays
 '
 Mitte = (MinElem + MaxElem) \ 2
 '
 ' Für die Prüfung der linken und rechten
 ' Seite die Zähler initialisieren
 '
 I = MinElem
 j = MaxElem
 Do
 '
 ' Von links bis zur Mitte prüfen
 '
 Do While sArray(I) sArray(Mitte)
 j = j - 1
 Loop

 If I j
 '
 ' Rekursiver Aufruf mit den Teil-Arrays
 '
 QuickSort sArray, MinElem, j
 QuickSort sArray, I, MaxElem
End Sub

und schreibt die sortierten Werte zurück in die Tabelle.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

danke erstmal für deine Antwort. Ich geb dir in Bezug auf auf die Sortierung vollkommen recht, leider habe ich nur die Möglichkeit, die aktuellen Lottozahlen mit einer Textdatei zu importieren, und hier sind Sie halt in Ziehungsfolge angegeben.
Leider hab ich noch etwas Schwierigkeiten den Code zu verstehen. Mein VBA ist wahrscheinlich nicht so toll. Aber vielleicht kannst du mir trotzdem weiterhelfen. In der Tabelle [Lotto] stehen die Felder [Zahl1] … bis [Zahl6]. Wie soll nun der Input in den Code aussehen, den ich hierfür schreiben muß?

Vielen Dank schon mal im Voraus

Gruß

shortiman

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo shortiman,

leider habe ich nur die Möglichkeit, die aktuellen Lottozahlen mit einer Textdatei zu importieren

die Listen, die ich kenne, sind alle sortiert!

In der Tabelle [Lotto] stehen die Felder [Zahl1] … bis [Zahl6]. Wie soll nun der Input in den Code aussehen, den ich hierfür schreiben muß?

Du musst erst mal ein Array mit 6 Positionen erstellen, z.B.:
Dim MYarray(6)

nun lädst du deine Tabelle als Recordset, gehst zum Ende und dann wieder zum Anfang.

Nun programmierst du eine Schleife, die alle Datensätze bis zum Ende durchläuft.

Pro Datensatz füllst du das Array mit den sechs Lottozahlen.

Mit dem gefüllten Array und den Min. und Max-Werten (1 und 49) rufst du die Sortierroutine auf.

Danach ist dein Array sortiert und kann dann wieder zurück geschrieben werden in den Datensatz.
nun gehst du zum nächsten Datensatz, und fängst wieder oben an dein Array zu füllen, bis alle durch sind.

Diese Routine ist in der VBA Hilfe von Access ausführlich beschrieben.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Netwolf,

ist mir ne Spur zu hoch, mein VBA ist wohl nicht ganz so dolle. Muß wohl auf die Excel-Variante zurückgreifen. Hier kann ich ich nach Spalten sortieren und danach festschreiben. Trotzdem Danke für deine Hilfe, vielleicht komm ich ja noch drauf wie der Code aussehen muß damit das funzt.

Gruß shortiman

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin, shortiman,

Muß wohl auf die Excel-Variante zurückgreifen. Hier
kann ich ich nach Spalten sortieren und danach festschreiben.

da liegt wohl ein garstig Missverständnis vor: Du sortierst nicht nach Spalten, sondern gibst die Reihenfolge vor, in der die Spaltenwerte zum Sortierbegriff verkettet werden. Also nichts anderes als die Sortierung in SQL, VB oder sonstwo.

Wenn’s denn Excel sein muss: Transponiere die Tabelle, sortiere und transponiere zurück.

Gruß Ralf