[Gelöst - aber Themenwechsel innerhalb des Threads] Zellen mit bedingter Formatierung auslesen und zählen
Moderator: Moderatoren
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
[Gelöst - aber Themenwechsel innerhalb des Threads] Zellen mit bedingter Formatierung auslesen und zählen
Moin in die Runde!
Lange habe ich geforscht und habe auch einige (sehr alte) Beiträge gefunden, die der Lösung nahe waren, aber sie dahingehend so zu editieren, da fehlt mir leider das passende Hintergrundwissen. Ich befürchte ebenfalls, dass es nicht mit einer Formel zu bewältigen ist, deswegen bin ich "hier"...
Folgendes Problem:
- Ich habe eine Matrix, z.B. A1:U15
- darin befinden sich ausschließlich bedingt formatierte Zellen.
- es gibt aber nur 2 verschiedene definierte Variationen dieser bedingt formatierten Zellen.
- die erste Variante heißt "Grau" und ist auch grau eingefärbt, die zweite heißt "Weiß", mit dementsprechenden Hintergrund.
- beide Variationen befinden sich "willkürlich" verstreut in dieser Matrix
Mein Wunsch ist es, dass ich mir SPALTENWEISE anzeigen lassen kann, wieviele weiße und wieviele der grauen Zellen vorhanden sind.
Da fragt sich mancher, was das denn jetzt alles soll...und die kann man doch auch so mal eben auszählen! Nein, diese Matrizen beinhalten manchmal bis zu 55.000 einzelne Zellen. Ich arbeite Anleitungen zum Weben aus, und diese brauchen nur graue und weiße Zellen. Und es wäre für mich sehr zum Vorteil zu wissen, ob sich die Anzahl der beiden Farb(Zell)variationen PRO SPALTE die Waage halten. Spalte deswegen, weil die Webbriefe von unten nach oben gelesen werden.
So, ich habe die Hoffnung nicht aufgegeben und würde mich riesig über Hilfe freuen.
Beste Grüße, Jörg
Lange habe ich geforscht und habe auch einige (sehr alte) Beiträge gefunden, die der Lösung nahe waren, aber sie dahingehend so zu editieren, da fehlt mir leider das passende Hintergrundwissen. Ich befürchte ebenfalls, dass es nicht mit einer Formel zu bewältigen ist, deswegen bin ich "hier"...
Folgendes Problem:
- Ich habe eine Matrix, z.B. A1:U15
- darin befinden sich ausschließlich bedingt formatierte Zellen.
- es gibt aber nur 2 verschiedene definierte Variationen dieser bedingt formatierten Zellen.
- die erste Variante heißt "Grau" und ist auch grau eingefärbt, die zweite heißt "Weiß", mit dementsprechenden Hintergrund.
- beide Variationen befinden sich "willkürlich" verstreut in dieser Matrix
Mein Wunsch ist es, dass ich mir SPALTENWEISE anzeigen lassen kann, wieviele weiße und wieviele der grauen Zellen vorhanden sind.
Da fragt sich mancher, was das denn jetzt alles soll...und die kann man doch auch so mal eben auszählen! Nein, diese Matrizen beinhalten manchmal bis zu 55.000 einzelne Zellen. Ich arbeite Anleitungen zum Weben aus, und diese brauchen nur graue und weiße Zellen. Und es wäre für mich sehr zum Vorteil zu wissen, ob sich die Anzahl der beiden Farb(Zell)variationen PRO SPALTE die Waage halten. Spalte deswegen, weil die Webbriefe von unten nach oben gelesen werden.
So, ich habe die Hoffnung nicht aufgegeben und würde mich riesig über Hilfe freuen.
Beste Grüße, Jörg
Re: Zellen mit bedingter Formatierung auslesen und zählen
mmh ... meinst Du was Du schreibst?- es gibt aber nur 2 verschiedene definierte Variationen dieser bedingt formatierten Zellen.
- die erste Variante heißt "Grau" und ist auch grau eingefärbt, die zweite heißt "Weiß", mit dementsprechenden Hintergrund.
Was Du schreibst entspricht z.B. der Situation:
es gibt Zellen mit der Bedingten Formatierung:
wenn Zellwert <=3 dann Vorlage "grau"
und es gibt Zellen mit der Bedingten Formatierung:
wenn Zellwert >3 dann Vorlage "weiß"
(nicht hingegen gäbe es Zellen mit der (zweiteiligen) bedingten Formatierung:
wenn Zellwert <=3 dann Vorlage "grau"
wenn Zellwert >3 dann Vorlage "weiß")
WENN das wirklich so ist, dann wäre es leicht herauszufinden in wievielen Zellen welche Bedingten Formatierung steht, ABER:
es ist meines Erachtens schwer bis unmöglich, bei beliebigen Bedingungen, herauszufinden welche Zelle welche resultierende Hintergrundfarbe hat.
Deshalb ist es, meines Erachtens, eher einfacher die Zählung per Formel, als per Makro zu machen, weil ja ohnehin eine KONKRETE Bedingung (bzw. Mehrere) ausgewertet werden muss.
Anders gesagt:
ich sehe keinen Weg per Makro die sichtbare Hintergrundfarbe einer Zelle zu ermitteln WENN diese das Ergebnis einer bedingten Formatierung ist, außer ich prüfe direkt die Bedingung der bedingten Formatierung.
Wegen der großen Vielfalt möglicher Bedingungen (bedenke das es auch "Formel ist" gibt) scheint mir das realistisch nur möglich wenn man die konkreten Bedingungen vorab kennt und im Makro bzw. einer benutzerdefinierten Funktion berücksichtigen kann.
Wenn man die konkreten Bedingungen aber vorab kennt, kann man doch gleich die Auswertung per Formel machen.
Könntest Du eine Beispieldatei hochladen? Dann kann man weiter überlegen.
Gruß
Stephan
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
Re: Zellen mit bedingter Formatierung auslesen und zählen
Moin Stephan,
Danke erstmal für Deine Antwort.
Ich bin aber auch ein Dussel.... da schreibe ich von bedingter Formatierung, aber gemeint ist die FormatVorlage....
(habe mich gerade mal selbst getreten....)
Es gibt also immer nur 2 Formatvorlagen, die sich in einer Matrix befinden. Weiß und Grau.
Die Vorlagen wurden auch genauso benannt.
Ich müsste dann nicht jede einzelne Zelle markieren, falls ich ihnen mal eine andere Farbe zuweisen möchte
Selbst dann weiß ich jedoch nicht, wie man diese Spalteweise auslesen könnte und dann entsprechend zählen.
Da würde es eh reichen, wenn man entweder nur graue oder nur die Weißen zählt, weil ich ja weiß, wieviele Zeilen ich in einem Webbrief habe.
Kann ich per Formel solche Formatvorlagen explizit mit dem Namen auslesen und zählen?
Mit "Zählenwenn" hatte ich keinen Erfolg.
Im Anhang ein Bild mit der Situation
Grüße, Jörg
Danke erstmal für Deine Antwort.
Ich bin aber auch ein Dussel.... da schreibe ich von bedingter Formatierung, aber gemeint ist die FormatVorlage....
(habe mich gerade mal selbst getreten....)
Es gibt also immer nur 2 Formatvorlagen, die sich in einer Matrix befinden. Weiß und Grau.
Die Vorlagen wurden auch genauso benannt.
Ich müsste dann nicht jede einzelne Zelle markieren, falls ich ihnen mal eine andere Farbe zuweisen möchte
Selbst dann weiß ich jedoch nicht, wie man diese Spalteweise auslesen könnte und dann entsprechend zählen.
Da würde es eh reichen, wenn man entweder nur graue oder nur die Weißen zählt, weil ich ja weiß, wieviele Zeilen ich in einem Webbrief habe.
Kann ich per Formel solche Formatvorlagen explizit mit dem Namen auslesen und zählen?
Mit "Zählenwenn" hatte ich keinen Erfolg.
Im Anhang ein Bild mit der Situation
Grüße, Jörg
- Dateianhänge
-
- Bildschirmfoto 2021-06-03 um 09.38.42.png (266.96 KiB) 2772 mal betrachtet
Re: Zellen mit bedingter Formatierung auslesen und zählen
Na dann z.B. mittels folgender Funktion:aber gemeint ist die FormatVorlage....
Code: Alles auswählen
Function VZ(bereich As String, vorlage As String)
blatt = ThisComponent.CurrentController.ActiveSheet
akt_bereich = blatt.getCellRangeByName(bereich)
With akt_bereich.RangeAddress
startspalte = .startcolumn
endspalte = .endcolumn
startzeile = .startrow
endzeile = .endrow
End With
z = 0
For i = startspalte To endspalte
For j = startzeile To endzeile
If blatt.getCellbyPosition(i,j).CellStyle = vorlage Then z = z + 1
Next j
Next i
HGFZ = z
End Function
=VZ("A1:A20";"grau")
'Problem' ist die Notwendigkeit den Bereich als String übergeben zu müssen, weshalb sich das ERgebnis bei Änderungen nicht automatisch aktualisiert, man muss also STRG+UMSCHALT+F9 drücken.
Gruß
Stephan
Re: Zellen mit bedingter Formatierung auslesen und zählen
Hallo
das musst doch gar nicht…ändere einfach nur die entsprechende Zellvorlage.Longyearbyen hat geschrieben:Ich müsste dann nicht jede einzelne Zelle markieren, falls ich ihnen mal eine andere Farbe zuweisen möchte
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
Re: Zellen mit bedingter Formatierung auslesen und zählen
@Karolus
Ja, das war ja auch die Intention, dass ich die Zellen als FormatVorlage gemacht habe.
Ich hätte statt "müsste" "muss" schreiben sollen... aber wie man gesehen hat war es gestern Abend wohl etwas zu spät für das Thema
Gleich werde ich den Code von Stephan ausprobieren, bin auf das Ergebnis gespannt.
Grüße, Jörg
Ja, das war ja auch die Intention, dass ich die Zellen als FormatVorlage gemacht habe.
Ich hätte statt "müsste" "muss" schreiben sollen... aber wie man gesehen hat war es gestern Abend wohl etwas zu spät für das Thema
Gleich werde ich den Code von Stephan ausprobieren, bin auf das Ergebnis gespannt.
Grüße, Jörg
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
Re: Zellen mit bedingter Formatierung auslesen und zählen
Moin Stephan,
danke für Deine Ausarbeitung des Codes.
Meine Schritte dazu waren:
In aktueller Arbeitsmappe/ Extras / Makros / Makros verwalten / OoBasic / neues Modul namens Zellen angelegt
dorthinein Deinen Code kopiert (Makroname VZ), die Formel in eine Zelle meines aktuellen Arbeitsblattes gepflegt.
Dann habe ich auf der Basic Oberfläche (im Editor) den Code mit F8 schrittweise laufen lassen. Leider mit der Fehlermeldung wie im Screenshot angezeigt.
Seltsamerweise passiert nichts, wenn ich im Arbeitsblatt Strg/Umsch/F9 drücke. Es wird aber auch kein Wert angezeigt, die Zelle ist leer.
Oder muss ich im Code explizit den Namen des Tabellenblattes angeben, auf dem ich mich gerade befinde? Das sollte doch eigentlich mit " blatt = ThisComponent.CurrentController.ActiveSheet" reichen.....
Ich muss dazu schreiben, dass ich als Mac-user cmd/umsch/F9 drücke. Sollte aber nicht daran liegen, oder?
Grüße, Jörg
danke für Deine Ausarbeitung des Codes.
Meine Schritte dazu waren:
In aktueller Arbeitsmappe/ Extras / Makros / Makros verwalten / OoBasic / neues Modul namens Zellen angelegt
dorthinein Deinen Code kopiert (Makroname VZ), die Formel in eine Zelle meines aktuellen Arbeitsblattes gepflegt.
Dann habe ich auf der Basic Oberfläche (im Editor) den Code mit F8 schrittweise laufen lassen. Leider mit der Fehlermeldung wie im Screenshot angezeigt.
Seltsamerweise passiert nichts, wenn ich im Arbeitsblatt Strg/Umsch/F9 drücke. Es wird aber auch kein Wert angezeigt, die Zelle ist leer.
Oder muss ich im Code explizit den Namen des Tabellenblattes angeben, auf dem ich mich gerade befinde? Das sollte doch eigentlich mit " blatt = ThisComponent.CurrentController.ActiveSheet" reichen.....
Ich muss dazu schreiben, dass ich als Mac-user cmd/umsch/F9 drücke. Sollte aber nicht daran liegen, oder?
Grüße, Jörg
- Dateianhänge
-
- Bildschirmfoto 2021-06-04 um 00.05.37.png (290.67 KiB) 2694 mal betrachtet
Re: Zellen mit bedingter Formatierung auslesen und zählen
Hallo
Stephans Funktion kann nicht eben mal aus der BASIC-IDE direkt aufgerufen werden, die musst du ähnlich zu anderen Calcfunktionen aus einer Zelle aufrufen, mit den erforderlichen Argumenten, SO WIE ES STEPHAN BEREITS SCHRUB:
Stephans Funktion kann nicht eben mal aus der BASIC-IDE direkt aufgerufen werden, die musst du ähnlich zu anderen Calcfunktionen aus einer Zelle aufrufen, mit den erforderlichen Argumenten, SO WIE ES STEPHAN BEREITS SCHRUB:
Stephan hat geschrieben:'Problem' ist die Notwendigkeit den Bereich als String übergeben zu müssen, weshalb sich das ERgebnis bei Änderungen nicht automatisch aktualisiert, man muss also STRG+UMSCHALT+F9 drücken.Code: Alles auswählen
=VZ("A1:A20";"grau")
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Zellen mit bedingter Formatierung auslesen und zählen
in meiner Funktion ist die Zeile:
falsch, und muss richtig heissen:
Am Besten ist Du änderst die Funktion gleich noch so ab, dann gibt es beim Öffnen der Datei keinen Laufzeitfehler:
und in einer Zelle aufrufen mit z.B.:
=VZ("A1:A20";"grau";"Tabelle1")
Gruß
Stephan
Code: Alles auswählen
HGFZ = z
Code: Alles auswählen
VZ = z
ja, das ist richtig so, denn beim Start aus der Basic Oberrfläche heraus, wird ja kein Wert für "bereich" übergeben.Dann habe ich auf der Basic Oberfläche (im Editor) den Code mit F8 schrittweise laufen lassen. Leider mit der Fehlermeldung wie im Screenshot angezeigt.
Am Besten ist Du änderst die Funktion gleich noch so ab, dann gibt es beim Öffnen der Datei keinen Laufzeitfehler:
Code: Alles auswählen
Function VZ(bereich As String, vorlage As String, blattname As String)
blatt = ThisComponent.Sheets.getByName(blattname)
akt_bereich = blatt.getCellRangeByName(bereich)
With akt_bereich.RangeAddress
startspalte = .startcolumn
endspalte = .endcolumn
startzeile = .startrow
endzeile = .endrow
End With
z = 0
For i = startspalte To endspalte
For j = startzeile To endzeile
If blatt.getCellbyPosition(i,j).CellStyle = vorlage Then z = z + 1
Next j
Next i
VZ = z
End Function
=VZ("A1:A20";"grau";"Tabelle1")
Gruß
Stephan
- Dateianhänge
-
- Zählen_mit_benutzerdefinierter_Funktion.ods
- (10.41 KiB) 40-mal heruntergeladen
Re: Zellen mit bedingter Formatierung auslesen und zählen
ich habe die Beispieldatei jetzt noch um ein Makro (neuberechnen) erweitert das die automatische Neuberechnung durchführt. Wenn man dieses dem EReignis "Auswahl geändert" hinzufügt erfolgt automatische Neuberechnung von VZ().
Gruß
Stephan
Gruß
Stephan
- Dateianhänge
-
- Zählen_mit_benutzerdefinierter_Funktion_V2.ods
- (10.74 KiB) 40-mal heruntergeladen
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
Re: Zellen mit bedingter Formatierung auslesen und zählen
Moin Stephan,
Danke dir!! Kann ich erst morgen Abend ausprobieren, bin dann erst wieder am Rechner,
Beste Grüße, Jörg
Danke dir!! Kann ich erst morgen Abend ausprobieren, bin dann erst wieder am Rechner,
Beste Grüße, Jörg
-
- **
- Beiträge: 21
- Registriert: Mi, 10.02.2016 17:35
Re: Zellen mit bedingter Formatierung auslesen und zählen
So, wieder daheim, nach einer Gewitterlastigen Autofahrt...
Moin "Karolus" - die Formel hatte ich entsprechend Stephans Anleitung tatsächlich in eine Zelle des Arbeitsblattes geschrieben, und auch das Makro dann angelegt. Also alles befolgt, wie es sein sollte.
Moin Stephan,
Was soll ich anderes schreiben.... als EXACTAMENTE! Das funzt so, wie ich mir das vorstelle! Und ich muss feststellen, was mir noch fehlt, um es selbst programmieren zu können. Fantastisch! Wo ist Deine Kaffekasse?!
Jedenfalls MUSS die Zelle, in der man die Formel (hier im akt.Fall =VZ("A01:A20";"grau";"Tabelle1") ) schreibt, ganz normal als Standard formatiert sein. Ich hatte sie auch mal in eine Zelle mit FormatVorlage geschrieben, aber dort hat es nicht funktioniert.
Beste Grüße, Jörg
--- Eine Frage an die Admins ---
Kann/darf ich den Header dahingehend ändern, dass es auch zum eigentlichen (gelösten) Problem passt? Da hatte ich mich ja verhauen
Moin "Karolus" - die Formel hatte ich entsprechend Stephans Anleitung tatsächlich in eine Zelle des Arbeitsblattes geschrieben, und auch das Makro dann angelegt. Also alles befolgt, wie es sein sollte.
Moin Stephan,
Was soll ich anderes schreiben.... als EXACTAMENTE! Das funzt so, wie ich mir das vorstelle! Und ich muss feststellen, was mir noch fehlt, um es selbst programmieren zu können. Fantastisch! Wo ist Deine Kaffekasse?!
Jedenfalls MUSS die Zelle, in der man die Formel (hier im akt.Fall =VZ("A01:A20";"grau";"Tabelle1") ) schreibt, ganz normal als Standard formatiert sein. Ich hatte sie auch mal in eine Zelle mit FormatVorlage geschrieben, aber dort hat es nicht funktioniert.
Beste Grüße, Jörg
--- Eine Frage an die Admins ---
Kann/darf ich den Header dahingehend ändern, dass es auch zum eigentlichen (gelösten) Problem passt? Da hatte ich mich ja verhauen
Re: Zellen mit bedingter Formatierung auslesen und zählen
Ich weiß nicht was die anderen meinen, aber ich denke lass es so wie es ist, denn du kannst ohnehin nur die Überschriften Deiner Beiträge ändern.--- Eine Frage an die Admins ---
Kann/darf ich den Header dahingehend ändern, dass es auch zum eigentlichen (gelösten) Problem passt?
Ich habe jetzt mal ergänzt: [Gelöst - aber Themenwechsel innerhalb des Threads].
GRuß
Stephan