VB6: Rangfolge von Zahlen in einer FlexGrid-Zeile

Hallöchen Forum,

Ich habe auf einer Form ein FlexGrid mit max. 10 beschriebenen Spalten.

In der untersten Zeile stehen jeweils Zahlenwerte von 0 bis max 50, die ich nun in eine Rangfolge bringen möchte, wobei bei gleichen Werten auch der gleiche Rang vergeben werden soll, dafür der nächste übersprungen wird (also wie beim Sport in PktTabellen)

Ich habe schon gegoogelt, aber keine passenden Hinweise gefunden, in excel gibts sowas ja mit der RANG-Funktion, ich hab aber kein Ahnung, wie man sowas in VB umsetzt :frowning:

Vlt kann mir ja jemand helfen…

lg Micha

Hallo,

In der untersten Zeile stehen jeweils Zahlenwerte von 0 bis
max 50, die ich nun in eine Rangfolge bringen möchte, wobei
bei gleichen Werten auch der gleiche Rang vergeben werden
soll, dafür der nächste übersprungen wird (also wie beim Sport
in PktTabellen)

OK. Und wo soll der Rang hin? In einem Array gemerkt, im Flexgrid angezeigt? Als Überschrift z.B.? Sollen die Daten dann entsprechend dem Rang sortiert werden?

Ich habe schon gegoogelt, aber keine passenden Hinweise
gefunden, in excel gibts sowas ja mit der RANG-Funktion, ich
hab aber kein Ahnung, wie man sowas in VB umsetzt :frowning:

In VB kenne ich eine solche Funktion ‚Rang‘ nicht. Das wird man selbst machen müssen. Aber das ist ja kein Problem. Mit der Funktion ‚Quicksort‘ geht das recht schnell.

Gruß Rainer

Hallo Rainer,

Danke für die schnelle Antwort.
Die Platzierung würde ich (nicht wie oben erwähnt) in einer Zeile unterhalb der Werte ablegen, jede Platzierung also unterhalb des dazugehörigen Wertes. Hast Du evtl mal ein Beispiel, wie man Quicksort für eine flexgrid-zeile anwenden kann?
Das Problem ist, das nicht immer alle 10 Spalten gefüllt sind, also mitunter auch nur 4 oder 6…

lg Micha

Hallo,

Hast Du evtl mal ein Beispiel, wie man Quicksort für eine
flexgrid-zeile anwenden kann?

kein Problem. Ich habe mal schnell etwas zusammengebaut und getestet, läuft.

Option Explicit

Private Sub Command1\_Click()
 Dim i As Integer
 'sortieren
 QuickSort 0, 9
 'Rang ermitteln und eintragen
 MSFlexGrid1.TextMatrix(2, 0) = 1
 For i = 1 To 9
 If MSFlexGrid1.TextMatrix(1, i - 1) = MSFlexGrid1.TextMatrix(1, i) Then
 MSFlexGrid1.TextMatrix(2, i) = MSFlexGrid1.TextMatrix(2, i - 1)
 Else
 MSFlexGrid1.TextMatrix(2, i) = i + 1
 End If
 Next
End Sub

Private Sub QuickSort(ByVal LB As Long, ByVal UB As Long)
 Dim P1 As Long, P2 As Long, Ref As Integer, TEMP As String, i As Integer

 P1 = LB
 P2 = UB
 Ref = MSFlexGrid1.TextMatrix(1, ((P1 + P2) / 2))

 Do
 Do While MSFlexGrid1.TextMatrix(1, P1) Ref
 P2 = P2 - 1
 Loop

 If P1 P2)

 If LB 



> Das Problem ist, das nicht immer alle 10 Spalten gefüllt sind,  
> also mitunter auch nur 4 oder 6...


Die leeren stehen dann vorn. :smile:
Die aber vor dem Eintragen des Rangs nach hinten zu schieben, falls das gewünscht ist, bekommst Du selbst hin?

Gruß Rainer

Nachtrag
Hallo,

nun sind im Beispiel auch leere Felder, die nach hinten geschoben werden …

Gruß Rainer

Option Explicit

Private Sub Command1\_Click()
 Dim i As Integer
 'sortieren
 For i = 0 To MSFlexGrid1.Cols - 1
 If Trim(MSFlexGrid1.TextMatrix(1, i)) = "" Then
 MSFlexGrid1.TextMatrix(1, i) = "99"
 End If
 Next
 QuickSort 0, 9
 'Range ermitteln und eintragen
 MSFlexGrid1.TextMatrix(2, 0) = 1
 For i = 1 To 9
 If MSFlexGrid1.TextMatrix(1, i - 1) = MSFlexGrid1.TextMatrix(1, i) Then
 MSFlexGrid1.TextMatrix(2, i) = MSFlexGrid1.TextMatrix(2, i - 1)
 Else
 MSFlexGrid1.TextMatrix(2, i) = i + 1
 End If
 Next
 For i = 0 To MSFlexGrid1.Cols - 1
 If MSFlexGrid1.TextMatrix(1, i) = "99" Then
 MSFlexGrid1.TextMatrix(1, i) = ""
 End If
 Next
End Sub

Private Sub QuickSort(ByVal LB As Long, ByVal UB As Long)
 Dim P1 As Long, P2 As Long, Ref As Integer, TEMP As String, i As Integer

 P1 = LB
 P2 = UB
 Ref = MSFlexGrid1.TextMatrix(1, ((P1 + P2) / 2))

 Do
 Do While MSFlexGrid1.TextMatrix(1, P1) Ref
 P2 = P2 - 1
 Loop

 If P1 P2)

 If LB 0 Then
 MSFlexGrid1.TextMatrix(1, i) = r
 Else
 MSFlexGrid1.TextMatrix(1, i) = ""
 End If
 Next
End Sub

Wow, genial!! Klappt!

An der Quicksort-Funktion war ich schon am basteln, aber so ist es besser gelöst…

Vielen Dank!

lg Micha