Excel-Makro zum Zählen von Zellen nach Farbe und zählt verbundene Zellen nicht als mehr als 1

Excel-Makro zum Zählen von Zellen nach Farbe und zählt verbundene Zellen nicht als mehr als 1

Wie kann ich ein Makro schreiben, das einen Zellbereich durchgeht und den Inhalt nach Farbe zählt, ohne jede einzelne Zelle innerhalb einer Gruppe verbundener Zellen zu zählen?Bildbeschreibung hier eingeben

Im Bild beispielsweise möchte ich, dass ein Makro die Anzahl 2 Gelb und 3 Grün zurückgibt, aber das Makro, das ich geschrieben habe, gibt die Anzahl 8 Gelb zurück, da es die 7 verbundenen gelben Zellen einzeln zählt.....

Antwort1

Pfui. In diesem Beispiel gibt es zwei schlechte Praktiken, die Sie vermeiden sollten: Farbcodierung von Zellen zur Vermittlung von Bedeutung und Zusammenführen von Zellen. Tun Sie das nicht. Tun Sie das einfach nicht. Verwenden Sie eine andere Spalte, um einen Status- oder Kategoriewert zu bestimmen. Anschließend können Sie die bedingte Formatierung verwenden, um eine Zellenfarbe basierend auf diesem Status- oder Kategoriewert festzulegen. Und Sie können einfache Arbeitsblattformeln verwenden, um eine Zählung pro Status oder Kategorie durchzuführen.

Das Zusammenführen von Zellen verursacht mehr Kopfschmerzen als Aspirin. Führen Sie Zellen einfach nicht zusammen. Sie verursachen Probleme bei der Auswahl und, wie Sie bemerkt haben, mit der Logik in VBA. Führen Sie keine Zellen zusammen, sondern führen Sie eine einfache Zählung mit Arbeitsblattformeln durch. Die „Notwendigkeit“, Zellen zusammenzuführen, kann immer mit der richtigen Datenarchitektur und Arbeitsblattstruktur überwunden werden.

Antwort2

Ich stimme voll und ganz zu@teylynWarnung, aber wenn es einige sehr berechtigte Gründe für eine solche Lösung gibt, können Sie beispielsweise eine solche Funktion verwenden.

Function ColorCount(rng As Range, pat) As Long
    Dim cell As Range, cnt As Long
    Select Case TypeName(pat)
        Case "Range": pat = pat.Interior.Color
        Case "String": pat = Range(pat).Interior.Color
    End Select
    For Each cell In rng
        If cell.Address = cell.MergeArea(1).Address And _
            cell.Interior.Color = pat Then
            cnt = cnt + 1
        End If
    Next cell
    ColorCount = cnt
End Function

Die Funktion nimmt zwei Argumente an: das erste ist der zu prüfende Zellbereich, das zweite ist das Farbmuster (das kann ein Verweis, Adresstext oder ein numerischer Farbwert sein). Die Farbe der Zelle aus der Basisformatierung, nicht bedingt.

Farbanzahl

verwandte Informationen