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?
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.