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

Forumthread: Nach Farbe sortieren mit VBA

Nach Farbe sortieren mit VBA
26.02.2016 13:15:36
Oliver
Hallo Zusammen,
habe bei einem größeren VBA Makro nur noch ein Problem, bei dem ich nicht weiterkomme. Vielleicht kann mir hier jemand weiterhelfen ?!
Ich habe in einer Tabelle einen Bereich markiert und möchte nur diesen Bereich nach 2 Kriterien sortieren:
1. Spalte E nach Werten, aufsteigend
2. Spalte B nach Farbe, grau oben
Hatte anfänglich beides nach Wert sortiert mit folgendem Befehl:
Selection.Sort Key1:=Selection.Cells(1, 5), order1:=xlAscending, Key2:=Selection.Cells(1, 1), order1:=xlAscending
Leider finde ich nirgends die entsprechende Syntax um nach Farbe zu sortieren.
Der Makro-Rekorder bringt mich hier nicht weiter, da er sich auf den absoluten Zellbereich bezieht. Dieser kann aber unterschiedlich sein.
Für einen Tip wäre ich sehr dankbar.
Gruß Oliver

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach Farbe sortieren mit VBA
26.02.2016 13:43:09
Michael
Hi Olli,
kein Wunder, daß Du die "Syntax" nicht findest: die gibt es nämlich nicht.
Ich würde eine Hilfsspalte anlegen und aus der Farbe abgeleitete Werte (in der Reihenfolge, wie Du sie eben haben willst) reinschreiben.
Abgesehen davon: hast Du die Zellen händisch gefärbt oder mit bedingter Formatierung?
So oder so stehen Dir ja die Formeln zur Verfügung, mit der Du die Färbung vorgenommen hast...
Schöne Grüße,
Michael

Anzeige
AW: Nach Farbe sortieren mit VBA
26.02.2016 13:48:17
Oliver
Hallo Michael,
okay, dann habe ich mich wohl etwas verrannt !
Die Zellen wurden zuvor auch mit einem VBA Code eingefärbt.
Aber mit welchem Befehl kann ich mir den Wert in eine Zelle schreiben ?
Ich könnte jetzt natürlich wieder ewig danach googeln, aber vielleicht kannst
du mir ja schneller auf die Sprünge helfen !
Im Voraus vielen Dank
Oli

Anzeige
AW: Nach Farbe sortieren mit VBA
26.02.2016 14:52:46
Oliver
Habe mittlerweile rausgefunden wie ich die Farbe auslese.
Sub Farbe()
' Liest in den Zellen B1 bis B10 die Farnummern aus
' und schreibt sie in die Zellen C1 bis C10
For r = 1 To 10                                    ' Beginn der For To Next Schleife
Cells(r, 3) = Cells(r, 2).Interior.ColorIndex   ' Hintergrundfarbe auslesen und schreiben
Next r                                              ' Ende der For To Next Schleife
End 

Sub                                             ' Ende des Makros
Nun habe ich noch das Problem, daß ich die Funktion nicht absolut,
sondern nur in allen Zeilen meines markierten Bereichs ausführen möchte.
Damit wäre ich kurz vorm Ziel.
Bitte nochmal um Hilfestellung.
Danke Gruß Oliver

Anzeige
hat sich wohl überschnitten
26.02.2016 15:00:10
Michael
Hi Oli,
übrigens hast Du in Deinem 1. Post einen "Zählfehler": offensichtlich markierst Du die Spalten A bis E, aber wenn Du nach Spalte E und B sortieren willst, darf es bei B nicht cells(1,1) heißen.
Um die Farbwerte in C zu schreiben, mußt Du "nur" die Konstruktion mit Offset/Replace anpassen.
Schöne Grüße,
Michael

Anzeige
AW: hat sich wohl überschnitten
26.02.2016 15:24:59
Oliver
Hallo nochmal,
Irgendwie bin ich zu blöd dafür........
Nein wie in meinem ersten Post geschickt markiere ich eigentlich alle Spalten
aber immer einen unterschiedlichen Bereich von Zeilen.
Mit dem Code von dir bekomme ich ein Problem mit der Resize Funktion.
Ich habe mal eine kleine Bsp.Tabelle angehängt,
in der ein Bereich markiert ist. Aber wie gesagt, variiert der.
Wenn ich die fehlende VBA-SUb durch die im Bild gezeigte Sortierung ersetze,
funktioniert der Rest meines Makro´s.
Vielleicht habe ich das ganze auch zu schlecht erklärt, sorry.
https://www.herber.de/bbs/user/103909.xls
Userbild
Danke für deine Mühe
Gruß Oli

Anzeige
AW: hat sich wohl überschnitten
26.02.2016 15:51:35
Michael
Hi Oli,
das weiß ich doch nicht, daß Du komplette Zeilen markierst...
Kannst ja nix dafür, aber man sollte einfach nix ohne Datei machen!
So, probier mal das:
Option Explicit
Sub machen()
Dim c As Range, hilf As Range, sel As Range
Set sel = Selection
Set hilf = Intersect(sel, Columns(3))
For Each c In hilf
c.Value = 10 ^ 8 - c.Offset(0, -1).Interior.Color
Next
sel.Sort Key1:=sel.Cells(1, 5), _
order1:=xlAscending, _
Key2:=sel.Cells(1, 3), _
order1:=xlAscending
End Sub
Aber Dir muß natürlich klar sein, daß die Spalte C dabei glattgebügelt wird. Besser wäre eine Spalte "rechts außen".
Außerdem ist das Ding mit komplett markierten Zeilen ziemlich lahm - aber ich habe jetzt keine Zeit mehr, das zu optimieren.
Schöne Grüße,
Michael

Anzeige
AW: hat sich wohl überschnitten
26.02.2016 15:58:36
Oliver
Okay, danke für alles und schönes WE.
Probiere noch etwas herum und gebe dann Feedback.
Gruß Oli
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nach Farbe sortieren mit VBA


Schritt-für-Schritt-Anleitung

Wenn Du in Excel nach Farben sortieren möchtest, kannst Du dies mit Hilfe von VBA tun. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke auf Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Option Explicit
    Sub nachFarbeSortieren()
        Dim c As Range, hilf As Range, sel As Range
        Set sel = Selection
        Set hilf = Intersect(sel, Columns(3))
    
        For Each c In hilf
            c.Value = 10 ^ 8 - c.Offset(0, -1).Interior.Color
        Next
    
        sel.Sort Key1:=sel.Cells(1, 5), _
                 order1:=xlAscending, _
                 Key2:=sel.Cells(1, 3), _
                 order1:=xlAscending
    End Sub
  4. Führe das Makro aus: Markiere den gewünschten Bereich in Deiner Tabelle und führe das Makro aus.

Mit diesem Makro kannst Du Deine Excel-Daten nach Farbe sortieren. Es verwendet eine Hilfsspalte, um die Farbwerte zu speichern, sodass Du einfach nach diesen Werten sortieren kannst.


Häufige Fehler und Lösungen

  • Fehler: "Zählfehler" im Code
    Wenn Du beim Sortieren einen Zählfehler erhältst, achte darauf, dass Du die richtigen Spalten im Code angibst. Zum Beispiel, wenn Du nach Spalte B und E sortieren möchtest, stelle sicher, dass die Indizes korrekt sind.

  • Problem mit der Resize-Funktion
    Wenn Du die Resize-Funktion benutzt und einen Fehler erhältst, überprüfe, ob der markierte Bereich tatsächlich die richtige Größe hat.


Alternative Methoden

Es gibt verschiedene Methoden, um in Excel nach Farbe zu sortieren. Eine einfache Möglichkeit ohne VBA ist die Verwendung einer Hilfsspalte, in der Du die Farbwerte manuell oder mit einer Formel ausliest. Dies kann besonders nützlich sein, wenn Du keine VBA-Kenntnisse hast.

Hier ist ein Beispiel für eine Formel, um die Farbe auszulesen:

=FARBE(A1)

Diese Formel gibt den Farbcode der Zelle A1 zurück. Du kannst dies für eine ganze Spalte anwenden und danach nach den Werten in der Hilfsspalte sortieren.


Praktische Beispiele

Angenommen, Du hast eine Liste von Verkaufszahlen, die farblich nach Priorität kategorisiert sind (rot, gelb, grün). Um diese nach der Farbe zu sortieren, gehe wie folgt vor:

  1. Markiere den gesamten Datenbereich.
  2. Führe das oben genannte VBA-Makro aus.
  3. Deine Daten sind jetzt nach der Farbe in Spalte B und den Verkaufszahlen in Spalte E sortiert.

Tipps für Profis

  • Verwende benutzerdefinierte Farben: Achte darauf, dass Du benutzerdefinierte Farben in Deinem VBA-Code berücksichtigst. Dies kann die Effizienz Deines Makros verbessern.
  • Optimierung: Wenn Du häufig nach Farben sortierst, kannst Du das Makro optimieren, indem Du die Hilfsspalte im Code dynamisch erstellst und löschst.

FAQ: Häufige Fragen

1. Kann ich auch nach mehreren Farben sortieren?
Ja, Du kannst den VBA-Code anpassen, um mehrere Farbwerte zu berücksichtigen, indem Du zusätzliche Sortierkriterien hinzufügst.

2. Funktioniert das nur in bestimmten Excel-Versionen?
Das VBA-Makro funktioniert in den meisten modernen Excel-Versionen, einschließlich Excel 2010, 2013, 2016 und 2019. Achte darauf, dass Makros in Deiner Excel-Version aktiviert sind.

3. Was, wenn ich die Farben mit bedingter Formatierung erstellt habe?
In diesem Fall musst Du die Farbwerte manuell oder mit VBA auslesen, da die bedingte Formatierung keine direkten Farbwerte in die Zellen schreibt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige