Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahlenwerte sortieren mit VBA

Forumthread: Zahlenwerte sortieren mit VBA

Zahlenwerte sortieren mit VBA
reiner
hallo Leute,
in den Zellen "K5", "M5", "O5", "Q5" und "S5" stehen in beliebiger Reihenfolge als Ergebnis von vorherigen Auswertungen die Zahlenwerte 1, 2, und 3.
Ich suche eine Möglichkeit diese 5 Zahlenwerte in absteigender Reihenfolge beginnend mit "K5" und dem höchsten Wert "3" bis "S5" und dem kleinsten Wert "1" anzuzeigen ohne die Zahlenwerte zu verändern.
Wenn alle 5 Zahlenwerte gleich sind erübrigt sich natürlich ein Sortiervorgang.
Hat jemand einen Vorschlag zur Realisierung?
mfg
reiner
Anzeige
AW: Zahlenwerte sortieren mit VBA
16.08.2012 22:53:30
Josef

Hallo Reiner,
wie und wo sollen die Zahlen den angezeigt werden?

« Gruß Sepp »

Anzeige
AW: Zahlenwerte sortieren mit VBA
16.08.2012 22:59:22
reiner
hallo Sepp,
habe versäumt die Zielzellen zu nennen, tut mir leid.
Die sortierten Zahlenwerte sollen in den gleichen Zellen stehen wie die zuvor unsortierten Zahlenwerte, notfalls können auch Hilfszellen verwendet werden.
mfg
reiner
AW: Zahlenwerte sortieren mit VBA
16.08.2012 23:00:19
Josef

Hallo Reiner,
und warum dann nicht einfach den Bereich sortieren?

« Gruß Sepp »

Anzeige
AW: Zahlenwerte sortieren mit VBA
16.08.2012 23:04:36
reiner
hallo Sepp,
ich verstehe deine Frage nicht
mfg
reiner
AW: Zahlenwerte sortieren mit VBA
16.08.2012 23:09:15
Josef

Hallo Reiner,
Zahlen markieren > Rechtsklick > Sortieren > A-Z - fertig.

« Gruß Sepp »

Anzeige
AW: Zahlenwerte sortieren mit VBA
16.08.2012 23:20:08
reiner
hallo Sepp,
Zahlen markieren > Rechtsklick > Sortieren > A-Z - fertig.
das klappt bei Zahlenwerten in Spalten, aber meines Wissens nicht in Zeilen,
außerdem gibt es immer eine Leerzelle zwischen den Zahlenwerten
mfg
reiner
Sorry, hatte überlesen...
16.08.2012 23:20:16
Josef

Hallo nochmal,
... das die Zellen nicht zusammenhängen.
Sub sortX()
  Dim objAl As Object, rng As Range, lngIndex As Long
  
  Set objAl = CreateObject("System.Collections.Arraylist")
  
  With objAl
    For Each rng In Range("K5,M5,O5,Q5,S5")
      .Add rng.Value
    Next
    .Sort
    For Each rng In Range("K5,M5,O5,Q5,S5")
      rng = objAl.Item(lngIndex)
      lngIndex = lngIndex + 1
    Next
  End With
  
  Set objAl = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Sorry, hatte überlesen...
16.08.2012 23:27:39
reiner
hallo Sepp,
das funktioniert schon fast so wie ich es mir vorgestellt habe,
allerdings steht der höchste Wert in der äußersten rechten Spalte.
Wenn der höchste Zahlenwert "3" ganz links stände wäre ich begeistert.
mfg
reiner
AW: Sorry, hatte überlesen...
16.08.2012 23:30:38
Josef

Hallo Reiner,
kein Problem.
Sub sortX()
  Dim objAl As Object, rng As Range, lngIndex As Long
  
  Set objAl = CreateObject("System.Collections.Arraylist")
  
  With objAl
    For Each rng In Range("K5,M5,O5,Q5,S5")
      .Add rng.Value
    Next
    .Sort
    .Reverse
    For Each rng In Range("K5,M5,O5,Q5,S5")
      rng = objAl.Item(lngIndex)
      lngIndex = lngIndex + 1
    Next
  End With
  
  Set objAl = Nothing
End Sub



« Gruß Sepp »

Anzeige
..oder so, danke nochmals, reiner
16.08.2012 23:34:24
reiner
o.T.
AW: Sorry, hatte überlesen...
16.08.2012 23:31:36
reiner
hallo Sepp,
ich habe die Zellnummern in die umgekehrte Reihenfolge abgeändert "S9,Q9,O9,M9,K9"
nun steht nach dem Surchlsuf der VBA-Prozedur der höchste Wert ganz links und der kleinste Wert ganz rechts.
danke Sepp damit ist das Problem gelöst
mfg
reiner
;
Anzeige
Anzeige

Infobox / Tutorial

Zahlenwerte sortieren mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden VBA-Code in das Modul ein:

    Sub sortX()
        Dim objAl As Object, rng As Range, lngIndex As Long
    
        Set objAl = CreateObject("System.Collections.Arraylist")
    
        With objAl
            For Each rng In Range("K5,M5,O5,Q5,S5")
                .Add rng.Value
            Next
            .Sort
            .Reverse
            For Each rng In Range("K5,M5,O5,Q5,S5")
                rng = objAl.Item(lngIndex)
                lngIndex = lngIndex + 1
            Next
        End With
    
        Set objAl = Nothing
    End Sub
  4. Schließe den VBA-Editor.

  5. Kehre zu Excel zurück und führe das Makro aus, um die Zahlenwerte in absteigender Reihenfolge anzuzeigen.


Häufige Fehler und Lösungen

  • Problem: Das Makro funktioniert nicht, weil die Zellen nicht zusammenhängen.

    • Lösung: Stelle sicher, dass die Zellen "K5", "M5", "O5", "Q5" und "S5" die gewünschten Werte enthalten und keine Leerzellen zwischen den Zellen bestehen.
  • Problem: Die Werte erscheinen in aufsteigender Reihenfolge.

    • Lösung: Überprüfe den Code und stelle sicher, dass die .Reverse-Methode verwendet wird, um die Reihenfolge umzukehren.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du die eingebauten Excel-Funktionen nutzen:

  1. Markiere die Zellen "K5", "M5", "O5", "Q5", "S5".
  2. Klicke mit der rechten Maustaste und wähle „Sortieren“ > „Z-A“.
  3. Beachte, dass diese Methode nicht funktioniert, wenn die Werte in einer Zeile und nicht in einer Spalte angeordnet sind.

Praktische Beispiele

Angenommen, die Zellen enthalten die Werte 1, 2, 3, 2 und 1:

  • Vor der Ausführung des Makros:

    • K5: 2
    • M5: 1
    • O5: 3
    • Q5: 2
    • S5: 1
  • Nach der Ausführung des Makros:

    • K5: 3
    • M5: 2
    • O5: 2
    • Q5: 1
    • S5: 1

So kannst du die Zahlenwerte in absteigender Reihenfolge anzeigen, ohne die Originaldaten zu verändern.


Tipps für Profis

  • Zellen dynamisch anpassen: Wenn du in anderen Bereichen arbeiten möchtest, ändere einfach die Range-Angabe im VBA-Code.
  • Fehlerbehandlung hinzufügen: Füge On Error Resume Next am Anfang des Codes hinzu, um mögliche Fehler zu ignorieren und das Makro stabiler zu machen.
  • Makro automatisieren: Du kannst das Makro so einstellen, dass es beim Öffnen der Datei automatisch ausgeführt wird.

FAQ: Häufige Fragen

1. Kann ich das Makro auch für andere Zellbereiche verwenden?
Ja, du kannst die Zellbereiche in der Range-Anweisung ändern, um andere Zellen zu sortieren.

2. Funktioniert das bei Excel Online?
Leider ist VBA nicht in Excel Online verfügbar. Du musst die Desktop-Version verwenden.

3. Was passiert, wenn ich leere Zellen in meinem Bereich habe?
Leere Zellen werden im Sortierprozess ignoriert, was die Sortierung möglicherweise beeinflussen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige