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
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
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
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
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
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
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
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
Nicht im Pivottable, doch in Autofilter.
Ein Pivottable verwendet nur die Autofilteroptionen.