[Gelöst - aber Themenwechsel innerhalb des Threads] Zellen mit bedingter Formatierung auslesen und zählen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Longyearbyen
**
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

Beitrag von Longyearbyen »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Stephan »

- 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.
mmh ... meinst Du was Du schreibst?

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
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Longyearbyen »

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
Dateianhänge
Bildschirmfoto 2021-06-03 um 09.38.42.png
Bildschirmfoto 2021-06-03 um 09.38.42.png (266.96 KiB) 2669 mal betrachtet
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Stephan »

aber gemeint ist die FormatVorlage....
Na dann z.B. mittels folgender Funktion:

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
und in einer Zelle aufrufen mittels z.B.:

=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
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Karolus »

Hallo
Longyearbyen hat geschrieben:Ich müsste dann nicht jede einzelne Zelle markieren, falls ich ihnen mal eine andere Farbe zuweisen möchte
das musst doch gar nicht…ändere einfach nur die entsprechende Zellvorlage.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Longyearbyen »

@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
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Longyearbyen »

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
Dateianhänge
Bildschirmfoto 2021-06-04 um 00.05.37.png
Bildschirmfoto 2021-06-04 um 00.05.37.png (290.67 KiB) 2591 mal betrachtet
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Karolus »

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:
Stephan hat geschrieben:

Code: Alles auswählen

 =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.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Stephan »

in meiner Funktion ist die Zeile:

Code: Alles auswählen

HGFZ = z
falsch, und muss richtig heissen:

Code: Alles auswählen

VZ = z
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.
ja, das ist richtig so, denn beim Start aus der Basic Oberrfläche heraus, wird ja kein Wert für "bereich" übergeben.

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
und in einer Zelle aufrufen mit z.B.:

=VZ("A1:A20";"grau";"Tabelle1")



Gruß
Stephan
Dateianhänge
Zählen_mit_benutzerdefinierter_Funktion.ods
(10.41 KiB) 36-mal heruntergeladen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Stephan »

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().

Makro_zuweiosen-entfernen.gif
Makro_zuweiosen-entfernen.gif (45.98 KiB) 2531 mal betrachtet

Gruß
Stephan
Dateianhänge
Zählen_mit_benutzerdefinierter_Funktion_V2.ods
(10.74 KiB) 36-mal heruntergeladen
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Longyearbyen »

Moin Stephan,
Danke dir!! Kann ich erst morgen Abend ausprobieren, bin dann erst wieder am Rechner,
Beste Grüße, Jörg
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Longyearbyen »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen mit bedingter Formatierung auslesen und zählen

Beitrag von Stephan »

--- Eine Frage an die Admins ---
Kann/darf ich den Header dahingehend ändern, dass es auch zum eigentlichen (gelösten) Problem passt?
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.

Ich habe jetzt mal ergänzt: [Gelöst - aber Themenwechsel innerhalb des Threads].



GRuß
Stephan
Antworten