Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Sortierung in MsgBox
#1
Hallo!

Ich möchte gerne folgende Sortierung in einer MsgBox:

In der Spalte A steht eine Jahreszahl, in der Spalte G ein Betrag und in der Spalte H eine Zahl.
Nun möchte ich in einer MsgBox (wenn ich auf den Button "Ranking" klicke) die ersten 5 geringsten Werte nach Spalte H sortiert haben.
Heißt in meinem Beispiel, dass in der MsgBox ganz oben folgendes stehen sollte:

2021: 1934,82
2020: 134416
2019: 937,44
2022: 917,35
2017: 782,28

Ich hoffe, dass mir jemand helfen kann.

LG
Thomas


Angehängte Dateien
.xlsm   Mappe1.xlsm (Größe: 16,4 KB / Downloads: 9)
Excel Version 2016
Antworten Top
#2
Hallo

so?

Code:
Sub Makro1()
    Dim i, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
    Sp = 7 'Werte in G
   
    For i = 1 To 5
        WWert = WorksheetFunction.Large(Columns(Sp), i)
        Zeile = WorksheetFunction.Match(WWert, Columns(Sp), 0)
        TText = TText & Format(Cells(Zeile, 1), "YYYY: ") & Format(WWert, "0.00") & vbLf
    Next
    MsgBox "Ranking Top 5" & vbLf & vbLf & TText

End Sub

LG UweD
Antworten Top
#3
Hallo!

Das ist perfekt. So habe ich mir das vorgestellt, danke für deine Hilfe.

LG
Thomas

Hallo noch einmal!

Tut  mir leid für die Störung. Ich habe nun aber leider ein Problem, dass nun die gesamte Spalte 7 durchsucht wird. Nachdem in der ersten Zelle der Spalte 7 ein Wert steht, wird diese nun auch mit berücksichtigt, was ich nicht will.
Wäre es möglich, nicht die ganze Spalte 7 zu durchsuchen sondern erst ab der 3. Zeile?

Ich hoffe, dass mir nochmals jemand helfen kann.

LG
Thomas
Excel Version 2016
Antworten Top
#4
Dann so...
Code:
Sub Makro1()
    Dim i, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
    Dim Z1 As Integer, LR As Integer, RNG As Range
   
    Z1 = 3 'Erste Datenzeile
    Sp = 7 'Werte in G
   
    LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
    Set RNG = Cells(Z1, Sp).Resize(LR + Z1 + 1, 1)
   
    For i = 1 To 5
        WWert = WorksheetFunction.Large(RNG, i)
        Zeile = WorksheetFunction.Match(WWert, Columns(Sp), 0)
        TText = TText & Format(Cells(Zeile, 1), "YYYY: ") & Format(WWert, "0.00") & vbLf
    Next
    MsgBox "Ranking Top 5" & vbLf & vbLf & TText

End Sub

LG UweD
Antworten Top
#5
Hallo!

Danke für den Code. Aber leider funktioniert er noch immer nicht ganz so, wie ich es mir vorstelle.
Es wird in der vorletzten Zeile in der MsgBox noch immer die erste Zelle berücksichtigt. (aber nur dann, wenn in der erste Zelle keine fixe Zahl drinnen steht, sondern eine Formel)
Gebe ich in der ersten Zelle statt der Formel den Betrag ein, den die Formel ermittelt, funktioniert dein Code.
Ich lade die Datei mit hoch. Klick mal auf den Button "Ranking", dann wirst du sehen, was ich meine.

LG
Thomas
Excel Version 2016
Antworten Top
#6
sehe keine neue Datei
Antworten Top
#7
Hallo,

hier eine Möglichkeit, die Ergebnisse in das Tabellenblatt zu schreiben. Hinsichtlich der MsgBox müsste ich noch mal dran, muss jetzt aber noch mal weg.

Code:
Sub test()
    Dim intAnz As Integer
    Dim varRow As Variant
    Dim varDatArr(4, 1) As Variant
    For intAnz = 1 To 5
        varRow = Application.Match(Application.WorksheetFunction.Small(Range("H3:H18"), intAnz), Columns(8), 0)
        varDatArr(intAnz - 1, 0) = Year(Cells(varRow, 1))
        varDatArr(intAnz - 1, 1) = Round(Cells(varRow, 7), 2)
    Next intAnz
    Range("N1:O5") = varDatArr
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
Warum sortieren ?
Code:
Sub M_snb()
   With Tabelle1.UsedRange
      .Sort .Cells(1).Offset(, 6), 2, , , , , , 2
      .AutoFilter 8, 4, 4
      For Each it In .SpecialCells(12)
        If it.Column = 1 Then c00 = c00 & Year(it) & vbTab & FormatNumber(it.Offset(, 6).Value, 2) & vbLf
      Next
   End With

   MsgBox c00
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Hallo,

ich kenne den genauen Hintergrund der Anfrage nicht; Daher ist die Antwort auch etwas Off-Topic, aber solche Auswertungen würde ich nicht hinter irgendwelchen Buttons mit VBA verstecken, sondern ganz einfach die eingebauten Pivottabellen nutzen. Da sind Top5-Auswertungen doch Standardfunktion.

Viele Grüße
derHöpp
Antworten Top
#10
Nicht  im Pivottable, doch in Autofilter.
Ein Pivottable verwendet nur die Autofilteroptionen.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • derHoepp
Antworten Top


Gehe zu:


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