Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  VBA: Rangfolge

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VBA: Rangfolge (2578 mal gelesen)
Hofe
Mitglied
Werkzeugmacher


Sehen Sie sich das Profil von Hofe an!   Senden Sie eine Private Message an Hofe  Schreiben Sie einen Gästebucheintrag für Hofe

Beiträge: 439
Registriert: 12.01.2008

erstellt am: 09. Nov. 2012 16:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Tach zusammen!

Ich habe einen zusammenhängenden Zellbereich mit ca. 50 Zellen, in denen beliebige Zahlen stehen, veränderlich, nicht sortiert.
Wie kann ich per VBA herausfinden, welche Zahl (nicht Zelle) z.B. die fünftgrößte ist?

Sortieren scheidet leider aus, da dadurch zuviel durcheinandergewürfelt wird.

Hintergrund: In diesem Bereich der Tabelle werden von Teilnehmern erreichte Punkte gelistet; nun soll eine Abfrage anzeigen, wieviele Punkte Teilnehmer X noch erreichen muss, um z.B. auf Platz 10 zu kommen.

Grüße

Hofe

------------------
Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Tobstar79
Mitglied
Dipl.-Ing. (Berechnungsing.)


Sehen Sie sich das Profil von Tobstar79 an!   Senden Sie eine Private Message an Tobstar79  Schreiben Sie einen Gästebucheintrag für Tobstar79

Beiträge: 10
Registriert: 09.11.2012

erstellt am: 09. Nov. 2012 19:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Hofe 10 Unities + Antwort hilfreich


Sortieren1.PNG


Sortieren2.PNG


Sortieren3.PNG

 
Hallo,

vielleicht hilft eine kurzzeitig angelegten Tabelle in der Du die Werte dann sortierst!

folgendes Beispiel:

Private Sub CommandButton1_click()
'temporäres Tabellenblatt erzeugen
Dim WSheet As Worksheet
Dim temp As String

temp = InputBox("Namen für temporäre Tabelle eingeben")
    If temp = ("") Then
    MsgBox ("Sie haben keinen Tabellennamen eingetragen" & vbCrLf & "Der Vorgang wird abgebrochen")
    Exit Sub
End If

For Each WSheet In ThisWorkbook.Worksheets
    If WSheet.Name = temp Then
    MsgBox "Tabelle mit gleichem Namen bereits vorhanden!" & vbCrLf & "Wählen sie einen anderen Namen"
    Exit Sub
End If
Next WSheet

Sheets.Add
ActiveSheet.Name = temp

'entsprechende Spalte kopieren und in temporärere Tabelle einfügen
Worksheets("Tabelle1").Columns(1).Copy Destination:=ActiveSheet.Columns(1)

'Werte im temporärem Sheet sortieren
ActiveWorkbook.Worksheets(1).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With ActiveSheet.Sort
    .SetRange Range("A:A")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

'5 Größten Wert auslesen
MsgBox ("der fünft größte Wert lautet " & Val(ActiveSheet.Range("A5")))

'temporäre Tabelle löschen
ActiveSheet.Delete

End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Hofe
Mitglied
Werkzeugmacher


Sehen Sie sich das Profil von Hofe an!   Senden Sie eine Private Message an Hofe  Schreiben Sie einen Gästebucheintrag für Hofe

Beiträge: 439
Registriert: 12.01.2008

Computer: Aldi
Schreibtisch: Ikea
Werkbank: Baumarkt
Software:
1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken

erstellt am: 09. Nov. 2012 22:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Servus Tobstar,

boah, da hast Du Dich mächtig ins Zeug gelegt, Respekt!

Dieser Weg mit "Auslagerung" der Daten in einem separaten Blatt kam mir auch schon den Sinn, nur wollte ich eben dieses Erstellen und wieder löschen eines neuen Blattes incl. kopieren und sortieren der Daten vermeiden, wenn's irgendwie geht.

Das Makro selbst ist nicht das Problem, vielmehr fehlt mir jeglicher Ansatz zur Vorgehensweise 

Erstmal besten Dank für Deinen Einsatz, vielleicht hat ja noch jemand eine Idee ohne Sortierung.

Grüße

Hofe

------------------
Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 11. Nov. 2012 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Hofe 10 Unities + Antwort hilfreich

Ich mache solche Abfragen indem ich entweder ein lokales Array anlegen lassen (sortieren erfolgt beim Auslesen der Daten) oder über einen temporären RecordSet (ADODB), da spart man sich die Sortierroutine.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

skyzem
Mitglied



Sehen Sie sich das Profil von skyzem an!   Senden Sie eine Private Message an skyzem  Schreiben Sie einen Gästebucheintrag für skyzem

Beiträge: 400
Registriert: 30.08.2006

Win 7 Enterprise x64
Cornerstone 5.3.0.5
Minitab 16.2.1.0
Excel 2010
Notepad++ 6.3.1
Putty 0.63
Calc.exe

erstellt am: 13. Nov. 2012 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Hofe 10 Unities + Antwort hilfreich

Das würde ich auch mit einem Array machen.
Beachten musst du aber, dass sowas vorkommen kann: (hier schon sortiert)
Code:
99
99
97
97
97
94

Hier wäre derjenige mit 94 Punkten an dritter Stelle - Im sortierten Array jedoch an sechster.
Oder er wäre sechster. Dann würde jedoch die 97 gleich darüber auf Platz 3 sein und es würde keinen 2. Platz geben.

------------------
MfG skyzem

[Diese Nachricht wurde von skyzem am 13. Nov. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 13. Nov. 2012 12:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Hofe 10 Unities + Antwort hilfreich

reicht ein
Code:

dblWert = Application.WorksheetFunction.Large(Range("A1:A50"), 5)
?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Hofe
Mitglied
Werkzeugmacher


Sehen Sie sich das Profil von Hofe an!   Senden Sie eine Private Message an Hofe  Schreiben Sie einen Gästebucheintrag für Hofe

Beiträge: 439
Registriert: 12.01.2008

erstellt am: 13. Nov. 2012 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Thomas Harmening:
reicht ein
Code:

dblWert = Application.WorksheetFunction.Large(Range("A1:A50"), 5)
?

Und ob das reicht! Genau so eine Funktion habe ich gesucht.
Um Längen eleganter als die Sortierfunktion und vor allem wieder viele Codezeilen durch eine einzige ersetzt 

Besten Dank!

Grüße

Hofe

------------------
Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz