Clever-Excel-Forum

Normale Version: Sortierung in MsgBox mit gleichen Werten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
Hallo!

Ich habe eine MsgBox (befindet sich im Tabellenblatt "Jahresstatistik - Ranking"), wo Werte sortiert angezeigt werden.
Nun habe ich das Problem, dass es vorkommen kann, dass Werte (im Tabellenblatt "Jahresstatistik - Spalte O) mehrmals gleich vorkommen können, aber in unterschiedlichen Jahren. In der MsgBox werden diese aber dann falsch angezeigt.
Aktuell ist es so, dass in der MsgBox der Rang 3, das Jahr 2022, der Betrag € 135,00 und die Anzahl der Auszahlungen (10) zweimal (doppelt) angezeigt werden. Ich hätte es gerne, dass das Jahr 2022 nicht zweimal angezeigt wird, sondern nur einmal aber dafür zusätzlich das Jahr 2023 (mit dem richtigen Betrag und der Anzahl der Auszahlungen), so wie es der Rang in der Spalte P eigentlich anzeigt. Denn jetzt habe ich einen Rangordnung 1, 2, 3, 3, 5. Ich hätte, dass dann 1, 2, 3, 4, 5 in der MsgBox steht.

Ich hoffe, dass ich mich verständlich ausgedrückt habe und dass mir jemand helfen kann.
Hi,

Vergleich (Match) bringt immer nur das erste Vorkommen, also mußt Du zwei Kriterien abfragen.
Deine Formel in C ist wohl eher undurchsichtig.
Es wäre hilfreich zu wissen, was Du mit dieser Formel willst.
Hallo!

Die Formeln in der Spalte C funktionieren deswegen nicht, weil ich einiges aus der Tabelle entfernt habe, aber um die geht es momentan auch nicht.
Und wie kann ich das in meinem Fall machen, mit zwei Kriterien?
Hallo,

füge vor der MsgBox Ausgabe deiner Prozedur diesen Codeteil ein:

Code:
arr = Split(TText, vbLf)
    For i = 0 To UBound(arr) - 1
        If arr(i) <> arr(i + 1) Then
            ReDim Preserve arrTmp(0 To j)
            arrTmp(j) = arr(i)
            j = j + 1
        End If
    Next i
    TText = Join(arrTmp, vbLf)
    Erase arrTmp()
    arr = Split(TText1, vbLf)
    For i = 0 To UBound(arr) - 1
        If arr(i) <> arr(i + 1) Then
            ReDim Preserve arrTmp(0 To j)
            arrTmp(j) = arr(i)
            j = j + 1
        End If
    Next i
    TText1 = Join(arrTmp, vbLf)
Dimensioniere wie folgt:
Dim j&, k&, arr, arrTmp()

Gruß Uwe
Hallo Egon12!

Danke für den Code, welchen ich bei mir eingefügt habe.
Nun ist es aber so, dass der 4. Rang gar nicht angezeigt wird, sondern nur der 1. -3. und der 5.
Zweitens habe ich nun einige unnötige Leerzeilen zwischen der Überschrift (Top 5 berechnet bis ...)  und den Rängen.
Kannst du mir das bitte mal ansehen, vielleicht mache ich auch etwas falsch.

LG
Hallo,
 
das hat es in der von dir hochgeladenen Datei ebenfalls nicht. Da kommt 1. / 2. / 3. / 3. / 5. und der Doppelte soll weg.
Hier die Anpassung 1. / 2 ./ 3. / 4. ohne den vorherigen Code über den Haufen zu schmeißen.
Code:
    arr = Split(TText, vbLf)
    For i = 0 To UBound(arr) - 1
        arr(i) = Mid(arr(i), InStr(1, arr(i), "Rang") - 1, 100)
    Next i
    For i = 0 To UBound(arr) - 1
        If arr(i) <> arr(i + 1) Then
            ReDim Preserve arrTmp(0 To j)
            arrTmp(j) = j + 1 & "." & arr(i)
            j = j + 1
        End If
    Next i
    j = 0
    TText = Join(arrTmp, vbLf)
    Erase arrTmp()
    arr = Split(TText1, vbLf)
    For i = 0 To UBound(arr) - 1
        arr(i) = Mid(arr(i), InStr(1, arr(i), "Rang") - 1, 100)
    Next i
    For i = 0 To UBound(arr) - 1
        If arr(i) <> arr(i + 1) Then
            ReDim Preserve arrTmp(0 To j)
            arrTmp(j) = j + 1 & "." & arr(i)
            j = j + 1
        End If
    Next i
    TText1 = Join(arrTmp, vbLf)

Gruß Uwe
Hallo!

Danke sehr für deine rasche Antwort. Wenn ich nun deinen neuen Code nehme, werden nur die Ränge 1 - 4 angezeigt, leider kein 5. bzw. wird das Jahr 2023 mit dem Betrag von 135 noch immer nicht angezeigt. (im 2. unteren Teil von der MsgBox)
Vielleicht nochmals zur Erklärung. Der doppelte Wert soll nicht weg sondern soll angezeigt werden, aber mit unterschiedlichen Rang, Jahr (2022 und 2023) und Anzahl der Auszahlungen.
Ich hoffe, dass du mir nochmals helfen kannst. Ich habe die Datei mit angehängt, da sieht man es schön.
Hallo,
 
da brauchts eine andere Herangehensweise. Der Suchmechanismus braucht eine 2 Schleifen, in der in Abhängigkeit der Jahreszahlen gesucht wird und nicht der Treffer der höchsten / 2. höchsten ... und die erste damit in Verbindung stehende Jahreszahl. Ich setzte mich heute Abend mal hin.
 
Gruß Uwe
Ich danke dir jetzt schon für deine Bemühungen.
Hallo,
ich habe die alte Prozedur verworfen und die Verarbeitung über Array Manipulation zusammengestellt.
[attachment=49580]

Gruß Uwe
Seiten: 1 2 3 4 5