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:
27.10.2022, 10:40 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2022, 10:40 von dertommy.)
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?
27.10.2022, 11:24 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2022, 11:38 von dertommy.)
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.
27.10.2022, 12:11 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2022, 12:13 von Klaus-Dieter.)
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
27.10.2022, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2022, 12:56 von snb.)
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
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.