Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Sortierung in MsgBox mit gleichen Werten
#1
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.


Angehängte Dateien
.xls   Mppe1.xls (Größe: 1,23 MB / Downloads: 10)
Excel Version 2016
Antworten Top
#2
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.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
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?
Excel Version 2016
Antworten Top
#4
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
Antworten Top
#5
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


Angehängte Dateien
.xls   Mppe1.xls (Größe: 1,23 MB / Downloads: 1)
Excel Version 2016
Antworten Top
#6
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
Antworten Top
#7
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.


Angehängte Dateien
.xls   Mppe1.xls (Größe: 1,24 MB / Downloads: 3)
Excel Version 2016
Antworten Top
#8
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
Antworten Top
#9
Ich danke dir jetzt schon für deine Bemühungen.
Excel Version 2016
Antworten Top
#10
Hallo,
ich habe die alte Prozedur verworfen und die Verarbeitung über Array Manipulation zusammengestellt.

.xls   Mappe umgebaut.xls (Größe: 1,23 MB / Downloads: 1)

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste