Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Frage zu Worksheetfunktion.Large

Frage zu Worksheetfunktion.Large
02.04.2014 10:48:45
Frank
Schönen Guten Morgen,
ich habe eine Frage zu Worksheetfunktion.Large.
Mit folgendem Code suche ich die 5 Größten Werte.
Und lasse mir dazu die Überschriften ausgeben.
 Set Bereich = Range(Cells(2, 7), Cells(2, ColumnCount))
ReDim Groeßten(5)
ReDim Spalte(5)
For Z = 1 To 5
Groeßten(Z) = Application.WorksheetFunction.Large(Bereich, Z)
Spalte(Z) = Bereich.Find(Groeßten(Z), LookIn:=xlValues, LookAt:=xlWhole).Column
Spalte(Z) = Cells(1, Spalte(Z))
Next

Das klappt auch so weit gut.
Es gibt nur Probleme wenn zwei Werte gleich sind.
Dann wird nämlich der nächst niedrige Wert genommen.
Wie kann ich es anstellen wenn es zwei gleich große größte Werte gibt
diese Mir auch an Nummer1 und Nummer 2 zurückgegeben werden?
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Vorab schon mal vielen Dank
Gruß
Frank

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ja, das ist auch logisch, denn, was soll ...
02.04.2014 15:08:38
Luc:-?
…passieren, Frank,
wenn bspw der größte Wert ≥5× vorkommt? Wodurch ist dann der 5.Wert vor allen anderen gleichgroßen zur Auswahl prädestiniert? Das kannst ja eigentlich nur du wissen, falls du darüber überhaupt schon mal nachgedacht hast… ;-]
Ansonsten musst du den Bruchteil einer lfd Nr zum Wert addieren, um die Reihenfolge der Werte zusätzlich zu berücksichtigen. Den musst du natürlich vor der Suche wieder entfernen. Allerdings wirst du dann wohl stets die Stelle seines 1.Auftretens erhalten, was bei meinem Bsp möglicherweise mit dem Wert Large(Bereich, 1) nicht 5 identisch wäre. Anderenfalls musst du statt Find wf.Match benutzen, aber die fktioniert nur mit Vektoren, also einzelnen Spalten bzw Zeilen.
Gruß Luc :-?

Anzeige
AW: Frage zu Worksheetfunktion.Large
02.04.2014 15:22:52
EtoPHG
Hallo Frank,
Zitat:Dann wird nämlich der nächst niedrige Wert genommen.
Das stimmt nicht. .Large findet auch doppelte Werte. Es muss also sonst etwas an deinem Code falsch sein. Bitte eine Beispielmappe, wenn du den Fehler nicht findest.
Gruess Hansueli

Nee, das hast du falsch verstanden, ...
02.04.2014 15:36:59
Luc:-?
…Hansueli;
wenn er mit Large den 5.-größten Wert sucht und einer davor ist doppelt, ist der gefundene Wert zwar der 5.-größte, hat aber die lfdNr 6! Genau das will er nicht. Er möchte von den größten immer den 5.Wert haben. Das ginge dann allerdings auch, indem er nacheinander soviel x-größte Werte auswählt, bis 5 beisammen sind und dann diesen letzten nimmt. Aber wie sinnvoll das ist, kann nur er wissen (s.ob.)…
Gruß Luc :-?

Anzeige
AW: Nee, das hast du falsch verstanden, ...
02.04.2014 15:42:45
Frank
Hallo Zusammen,
ich suche die 5 Größten Werte. Unter Umständen können auch doppelte dabei sein.
Sinn und Zweck ist es zu den 2 Größten Werten(auch doppelte) die Spaltenüberschrift zu übernehmen und in ein Textfeld innerhalb eines Diagramms auszugeben.
Ich hoffe es ist etwas klarer
Gruß
Frank

Das hattest du alles nicht gesagt, denn dafür ...
02.04.2014 16:42:07
Luc:-?
…ist deine Methode ohnehin untauglich, Frank. :-|
Luc :-?

Ich glaube, ich hab das richtig verstanden...
02.04.2014 16:27:07
EtoPHG
Luc,
Seine Beispielmappe beweist, dass er den ersten Wert nicht findet, weil er falsch sucht.
@Frank
Mit diesem Code müsste es funktionieren:
Sub Groeßten()
Dim Bereich As Range
Dim Groeßten()
Dim Spalte()
Dim ColumnCount, Z As Integer
ColumnCount = Cells(1, Columns.Count).End(xlToLeft).Column
Set Bereich = Range(Cells(2, 1), Cells(2, ColumnCount))
ReDim Groeßten(5)
ReDim Spalte(5)
For Z = 1 To 5
Groeßten(Z) = Application.WorksheetFunction.Large(Bereich, Z)
Spalte(Z) = Bereich.Find(Groeßten(Z), After:=Bereich.Cells(1, Z), LookIn:=xlValues,  _
LookAt:=xlWhole, SearchDirection:=xlNext).Column
Spalte(Z) = Cells(1, Spalte(Z))
MsgBox Groeßten(Z) & " " & Spalte(Z), , Z
Next
End Sub
Gruess Hansueli

Anzeige
Richtig, den verschwurbelten Zyklus übersehen, ...
02.04.2014 16:46:02
Luc:-?
…aber jetzt will er's ja wieder etwas anders…
Na, dann macht mal! ;-)
Luc :-?

AW: Richtig, den verschwurbelten Zyklus übersehen, ...
03.04.2014 07:49:52
Frank
Guten Morgen Zusammen,
erst einmal möchte ich mich für die offensichtlich unpräzisen Beschreibungen zu meinem Problem endschuldigen.
Dann möchte ich mich bei Euch für die Tipps und Hinweise bedanken.
@ Hansueli: In der Beispieldatei funktioniert dein Code so wie ich es mir erhofft hatte.
Binde ich den Code in meine Mappe ein, habe ich wieder das alte Problem.
Bin mittlerweile ein wenig Ratlos
Beste Grüße
Frank

AW: Frage zu Worksheetfunktion.Large
02.04.2014 15:39:44
Frank
Hallo Hansueli,
hier die Beispieldatei
https://www.herber.de/bbs/user/89958.xlsm
Gruß Frank

Anzeige
AW: Frage zu Worksheetfunktion.Large
02.04.2014 15:44:58
fcs
Hallo Frank,
mit einem Hilfsarray und anderen Funktionen geht es .
Für das Hilfarray werden die Zahlen im Bereich mit einer fixen Zahl multipliziert und eine fortlaufende Nummer addiert. Die Funktion Large wird dann auf das Hilfsarray angewendet.
Gruß
Franz
   Dim arrWerte() As Double
Set Bereich = Range(Cells(2, 7), Cells(2, ColumnCount))
ReDim Groeßten(5)
ReDim Spalte(5)
ReDim arrWerte(1 To Bereich.Columns.Count)
For Z = 1 To Bereich.Columns.Count
arrWerte(Z) = Bereich.Cells(1, Z) * (10 ^ Len(Format(Bereich.Cells.Count * 10, "0"))) + Z
Next
For Z = 1 To 5
Groeßten(Z) = Application.WorksheetFunction.Large(arrWerte, Z)
Spalte(Z) = Cells(1, Application.Match(Groeßten(Z), arrWerte, 0) + Bereich.Column - 1)
Debug.Print Z & "   -   " & Spalte(Z) & "   -   " _
& Cells(2, Application.Match(Groeßten(Z), arrWerte, 0) + Bereich.Column - 1)
Next
Erase arrWerte

Anzeige
AW: Tausend Dank an Alle
03.04.2014 08:41:22
Frank
Hallo Franz,
passt perfekt
Gruß Frank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige