BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

spezialfilter per makro

CALC ist die Tabellenkalkulation, die Sie immer wollten.
johannn
Beiträge: 10
Registriert: Mi 19. Jan 2022, 16:00

Re: spezialfilter per makro

Beitrag von johannn » So 23. Jan 2022, 14:22

zunächst einmal vielen dank an Wanderer und an dich Mikele!
ich werde jetzt versuchen schritt für schritt alles in meiner datei zu erklären, obwohl es mir nur um das automatische sortieren und verschieben geht. da ich aber alles als leie "konstruiert" habe und höchstwahrscheinlich einiges kompliziert getrickst habe, bin ich offen für eine einfache glatte lösung.

also ich spile saxophon. zum üben benutze ich ein programm, dass mir die begleitmusik und auf dem bildschirm laufen synchron die noten auf einem notenblatt visuell ab. das programm erkennt über mic. genau welche note ich wann anfange und beende, also wie gut ich spiele. dafür bekomme ich punkte zwischen 0 und 10000 (0-100%). es gibt stücke die kann ich in originalgeschwindigkeit nicht spielen. da habe ich die möglichkeit die abspielgeschwindigkeit bis zu 50% zu reduzieren.
-hier kommen die negativpunkte her, in spalte L vermerke ich auf wieviel ich verlangsame.

so, ich habe eine lange liste von stücken die ich üben möchte, ich spiele sie unterschiedlich gut also haben alle unterschiedliche punktzahlen und sind für mich unterschiedlich schwer.
ich habe also 3 kategorien geschaffen: bis 7500, ab 7500bis 9000 und über 9000.
jedes stück möchte ich max. 3 mal spielen (C3 bis E3, hier füge ich den gespielten punktestand den ich mittels bildschirmscreenshot OCR im zwischenspeicher habe jeweils ein) mindestens aber sooft bis ich den vorhergehenden punktestand spalte E überboten habe. in F3 wird angezeigt wie oft ich gespielt habe und der wert wird in H3 vermerkt.

es gibt 5 makro schaltfläcken in A2-D2 (Standard/Module2/Neu, siebzig, mitte, hoch)
lassen wir "neu" aussenvor, da kommen neue stücke rein, die ich noch nie gespielt habe.
"75%" hier fordere ich ein stück das ich bis jetzt mit max. 7500punkten gespielt habe an. dazu holt sich das makro die oberste liederzeile (zeile3) aus der entprechenden tabelle "ungespiet bis 75", löscht die zeile dort und fügt sie oberhalb zeile4 des tabellenblatts "gespielt" ein und öffnet den link in B4 der in S4 und S4 zusammengebaut ist.
dieses makro hat noch andere funktionen: wenn G1 (zähler der aktuell gespielten stücke) grösser als null ist dann soll der punktestand ausgewertet werden. das heißt, in E4(vorletzter spielstand) stand 7988 und in G4 (letzter sielstand) 7710 und in H3 ist der aktuelle punkte stand sagen wir mal 8000, F3 wieoft gespielt zb.3 mal.
jetzt soll ersteinmal deraktuelle higscore bestimmt werden gegen den ich heute antrete. das passiert in Q4, dieser wert muss in E4.
der aktuell erreichte wert H3 (8000) muss in G4 und F3 muss nach H3.
(F4 ist nur eine info, um soundsoviel % verbessert/verschlechtert).

ich habe mal kurz über meinen obigen text geschaut, und bin mir jetzt nicht mehr ganz sicher, ob ich mit meinem "ausfühlichen" schreiben nicht noch mehr verwirrung stifte. ich bin wirklich kein übermässiger chaot:)
villeicht stoppe ich hier mal und ihr schaut ob euch das weiterbringt, nur soviel bis auf die geschichte mit dem Punkteaswerten die in 90% funktioniert aber in 10% die falschen werte einfügt ( scheint sich zu verschlücken unt trägt den letzten wert der im zwischenspeicher war in alle felder ein...) macht die tabelle genau das was ich möchte und leistet mir gute dienste. die sache mit dem "automatisch wiederauffüllen" (sortiert wird nach "letztem Punktestand G4) der geleeren tabellenblätter ist eine neue idee...

jetzt fällt mir gerade auf, dass ich dein makro, Mikele, noch nicht ausprobiert habe. wenn das die lösung ist, dann hab ich jetzt ein haufen umsonst gettippt..........
gruß, johann

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » So 23. Jan 2022, 17:01

Hallo,
danke für die ausführlichen Infos (auch wenn ich sie im Detail noch nicht verstehe).
1) Wie werden die negativen Punkte gewertet? Zählen Sie in die Gruppe <75%? Warum überhaupt negativ?
2) Wenn du ein Stück spielen (=üben) möchtest: Du gibst z. B. vor, dass es ein Stück <75% sein soll. Damit wird das oberste des Tabellenblattes "ungesp bis 75%" gewählt. Es wird in die oberste Zeile der Tabelle "gespielt " verschoben.
Du spielst nun 1-3 mal und trägst jeweils in C3-E3 die erreichte Punktzahl ein.
Wird jetzt ein neues Übungsstück angefordert, dann werden die Übungsdaten (C3-E3) in den Datensatz des Liedes übertragen.
Spalte E: bisheriger Höchstwert
Spalte G: aktueller erreichter Spielwert (Maximum der höchstens 3 Spiele)
Spalte H: wie oft wurde gespielt (als wie oft hintereinander bis ein anderer Titel gewählt wurde)
Ist das so richtig?
Nach welchem Kriterium soll ein neues Musikstück ausgewählt werden? Nach dem bisherigen Prinzip, wäre es wohl immer ein zufällig ausgewähltes aus den aktuell noch nicht geübten Stücken. Wenn keines mehr da ist, dann wird die Anzahl der Übungen bei allen dieser Kategorie auf Null gesetzt und es geht von vorn wieder los.
Gruß,
mikele

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » So 23. Jan 2022, 18:53

Hallo,
hier mal ein Ansatz für einen anderen Aufbau. derzeit noch komplett ohne Makros.
Eine Tabelle für alle Titel. Eine Tabelle, die (per Pivotabelle) dir eine Übersicht über die Titel + Punkte liefert.
Eine Tabelle für die Übung: nach Auswahl der Kategorie wird (nur um die Arbeitsweise anzudeuten!) per Zufall einer der Titel ausgewählt und die aktuellen Daten angezeigt.
Dazu können nun die Übungsergebnisse eingetragen werden.
Dateianhänge
masterliste_neu.ods
(71.22 KiB) 62-mal heruntergeladen
Gruß,
mikele

johannn
Beiträge: 10
Registriert: Mi 19. Jan 2022, 16:00

Re: spezialfilter per makro

Beitrag von johannn » So 23. Jan 2022, 19:09

hallo Mikele,
zu 1)ich zitiere aus meinem 2ten absatz vorrangegangenes mail:
es gibt stücke die kann ich in originalgeschwindigkeit nicht spielen. da habe ich die möglichkeit die abspielgeschwindigkeit bis zu 50% zu reduzieren.
-hier kommen die negativpunkte her, in spalte L vermerke ich auf wieviel ich verlangsame.
also es sind normale positivpunkte die ich in negativ umwandle weil ich sie ja langsamer spiele. sonst würde ein stück dass ich mit sagen wir 8000p bei normaler geschwindigkeit spiele einem stück dass ich ebenfalls mit 8000p aber mit sagen wir 75% (25%langsamer und deshalb einfacher zu spielen) gleichstellen. also ist ein negativpunkte stück eindeutig in der kategorie unter 75% einzuordnen, obwohl es ja auch 8000 punkte erreicht hat.
zu 2) korrekt!
zu "Nach welchem Kriterium soll ein neues Musikstück ausgewählt werden?" das bestimme ich indem ich das entsprechende makro A2 bis D2 anklicke. üblicherweise starte ich mit einem einfachen also 90+ dann ein mittleres 75-90 dann ein schweres unter75. so dass ich immer gleichmäßig verteilt spiele und keinen frust bekomm weil ich 3 schwere stücke hintereinander habe.
wir kommen der sache näher....
wenn jetzt zb. die tabelle "75%" leer wäre (ich habe sie alle schon durchgespielt und sie haben einen neuen aktuellen punktestand G) dann steht da in "gespielt" B1= "0"(in C1 steht wieviele noch von 75-90, oder D1 wieviele 90+ da sind) meine idee ist, dass der wert 0 in B1 das makro triggert, dass dafür sorgt, dass aus der liste der aufgelaufenen stücke (in "gespielt) alle die in spalte G (aktueller punktestand) unter 7500 punkte sind in die tabelle bis 75% verschiebt (also wieder auffüllen) und in "gespielt" die datensätze lückenlos entfernt. dann geht es von vorne los!
aufgefüllt werden soll nur die tabelle (bis75 oder 75-90 oder 90+) die leer ist, dadurch stelle ich sicher dass ich wirklich durch alle lieder durch bin.
ich glaube wir sind schon nahe dran 8-)
gruß, johann

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » So 23. Jan 2022, 19:27

Hallo,
nochmal zur Auswahl: Nach welchem Kriterium wird z. B. ein unter 75%-Stück gewählt. Es wird ja immer das oberste in der Liste gewählt - gibt es da ein Kriterium in welcher Reihenfolge die Stücke gelistet werden?
Wenn (nach dem jetzigen System) die Titel aus "gespielt " zurück nach "unter 75%" geschoben werden, wird/soll dann die Anzahl der Übungen (Spalte H) wieder auf 0 gesetzt werden?
Gruß,
mikele

johannn
Beiträge: 10
Registriert: Mi 19. Jan 2022, 16:00

Re: spezialfilter per makro

Beitrag von johannn » So 23. Jan 2022, 20:28

hallo Mikele,

inerhalb der tabelle unter 75 zum beispiel wird einfach das oberste lied gezogen, es ist egal welches.
in meiner originalversion gehe ich soweit, dass ich alle tittel per zufall durchmische bevor die oberste zeile in die gespielt tabele geschoben wird.

die spalte H soll erst dann zurückgesetzt werden wenn ich ein neues stück aufrufe. das gibt mir gelegenheit festzustellen, mit wieviel versuchen ich den letzten spielstand in G erreicht habe und ob ich mich verbessert hatte im vergleich zum highscore E. also nein H soll nicht resetet werden, die zeilen werden wie sie sind "zurückgeschoben"

gruß, johann

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » So 23. Jan 2022, 21:30

Hallo,
in meiner "neuen" Datei waren Fehler enthalten.
Die Unterscheidung zwischen ungespielt und gespielt (bisher durch verschiedene Tabellenblätter geregelt) habe ich nun durch eine zusätzliche Spalte gelöst.
Es wird nun auf in der Tabelle "Übung" zufällig ein noch nicht gespielter Titel der gewählten Kategorie herausgesucht.
Das Setzen der neuen Werte nach dem Abschluss des Übens (=auswahl eines neuen Titels usw. muss noch per Makro umgesetzt werden.
Dateianhänge
masterliste_neu.ods
(63.55 KiB) 59-mal heruntergeladen
Gruß,
mikele

johannn
Beiträge: 10
Registriert: Mi 19. Jan 2022, 16:00

Re: spezialfilter per makro

Beitrag von johannn » So 23. Jan 2022, 23:38

hallo Mikele,
ich habe mir deine datei angeschaut und muss feststellen, dass das um einiges eleganter und einfacher vom aufbau her ist.
im anhang habe ich mal ein screenshot von meiner realsituation gemacht.
meine Masterliederliste ist immer "on top" also egal was ich anklicke oder mache sie bleibt immer obendrauf voll sichtbar.
da habe ich ein dash-board mit allen infos und allen schaltflächen auf einem blick.
A1 -D1 anzahl der ungespielten lieder in den verschiedenen kategorien. in E1 die summe aller ungespielten lieder.
F1= durchschnittlich pro übungstag gespielte stücke
G1=aktuell gespielte verschiedene stücke
H1=anzahl der gespielten stücke von
I1= allen insgesammt vorhandenen stücken
A1-D1 makroschaltflächen,
E2=info letztes aufgerufenes makro
G2=gesammtzahl der aktuell gespielten stücke (G1 kann zb 3 sein aber wenn ich jedes 3 mal spiele dann ist G2=9)
H2, I2 konntrollwerte, falls ich irgendwo einstück gelöscht oder fehlgeleitet habe, bekomme ich eine fehlermeldung.
A3 hier trage ich die mundstück und reed (das tonerzeugerblättchen)ein das wird später in die tabelle "auswertung" übertragen
B3 ist die aktuelle prozentuale verbesserung/verschlechterung im durchschnitt und wird auch am ende in die tabelle "auswertung" übertragen. dann kann ich dort einiges wie die bestmögliche mundstück/reed kombination auswerten. es werden auch das datum und die dauer der übung erfasst.
C3-E3=punkte, die jenachdem wie sie im vergleich zum higscore rot gelb oder grün angezeigt werden
F3= wie oft gespielt
G3= höchstwert C3-E3, allerdings wenn unter dem "X"in L3 eine zahl (verlangsamtes abspielen) ist, dann wird die zahl negativ und so nach G4 übertragen.
A4=zufallszahl zum mischen
B4= link der automatisch (ohne händisches anklicken) geöfnet wird, ist er grün dann ist es ein stück aus dem ich alle spiellücken entfern kabe, sodass ich keine großen pausen im stück habe.
E4=alter punktestand
F4=prozentuale verbesserung/verschlechterung zwischen altem punktestand und aktuellem
G4=neuer punktestand
H4= wie oft gespielt
L4=verlangsamung auf x%
M4=hier trage ich kommentare errinerungen etc(zb. 2hoch, 2halbtöne hochsetzten) ein die ich dann nach der übung umsetzte.

worauf ich hinausmöchte, ist dass ich in diesem kleinen kästchen (fenster) alles auf einem blick draufhabe und mit max. 1 klick alles auslöse. selbst das eintagen des punktestands in C3-E3 geht (mit dem programm Greenshot) hotkey "pfeiltaste rechts" C3 anklicken strg+v fertig.
ich würde also gerne mein "dash-bord" erhalten jetzt ist die frage wie man das alles unter einem hut bekommen könnte.

gruß, johann
Dateianhänge
screenshot.odt
(256.68 KiB) 55-mal heruntergeladen

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » Mo 24. Jan 2022, 18:58

Hallo,
offensichtlich müssen noch mehr Dinge erfasst werden:
F1= durchschnittlich pro übungstag gespielte stücke
G1=aktuell gespielte verschiedene stücke
H1=anzahl der gespielten stücke von
Wie werden diese erfasst? Offensichtlich, soll die Information, dass du am Tag X das Stück Y so oft und so lange geübt hast, nicht mit dem nächsten Übungsstück verschwinden, sondern dokumentiert und ausgewertet werden.
A3 hier trage ich die mundstück und reed (das tonerzeugerblättchen)ein das wird später in die tabelle "auswertung" übertragen
Da wird es sinnvoll über weitere Strukturen nachzudenken.
Gruß,
mikele

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: spezialfilter per makro

Beitrag von mikele » Sa 29. Jan 2022, 17:35

Hallo,
um die ursprüngliche Frage (innerhalb der bisherigen Dateistruktur) zu beantworten, kann mit dem folgenden Makro der Bereich gefiltert und dann die Zeilen des Filterergebnis verschoben werden.

Code: Alles auswählen

Sub filter_kopieren

	oDoc=ThisComponent
	oTab=oDoc.Sheets.getByName("gespielt ")
	'letzte benutzte Zeile in Spalte G finden
	oc=oTab.Columns(6).queryEmptyCells.RangeAddresses
	n=oc(uBound(oc)).StartRow-1
	'Zugriff Datenbereich
	quelle=oTab.getcellRangeByPosition(0,3,18,n)
	'Ziel festlegen
	ziel=oDoc.Sheets.getByName("ungesp bis 75%").getCellRangeByName("A3")
	'Filter erstellen
	oFilter = quelle.createFilterDescriptor(True)
	oFilter.ContainsHeader=false
'	oFilter.CopyOutputData=true	'gefilterte Zellen sollen ins Ziel kopiert werden
'	oFilter.OutputPosition=ziel.celladdress
	oFilter.SkipDuplicates=true
	'Filterbedingung setzen
	aFilterFields = DimArray(0)
		aFilterFields(0) = new com.sun.star.sheet.TableFilterField
		aFilterFields(0).Connection = com.sun.star.sheet.FilterConnection.AND
		aFilterFields(0).field=6
		aFilterFields(0).IsNumeric = true
		aFilterFields(0).NumericValue=7500
		aFilterFields(0).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
	oFilter.setFilterFields(aFilterFields)
	'Filterung durchführen
	quelle.filter(oFilter)
	'Filterergebnis auswählen und kopieren	
	oDoc.CurrentController.select(quelle)
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
	dim args5(0) as new com.sun.star.beans.PropertyValue
	args5(0).Name = "Nr"
	args5(0).Value = 2
	dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args5())
	dim args6(0) as new com.sun.star.beans.PropertyValue
	args6(0).Name = "ToPoint"
	args6(0).Value = "$A$40"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
	dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
	'Filterergebnis: zeilen löschen
	oDoc.CurrentController.select(quelle)
	dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "Flags"
	args3(0).Value = "R"
	dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args3())
	quelle.rows.isvisible=true
	
End Sub
Um mit der Bedingung 7500-9000 zu filtern, müssen zwei Filterfelder gesetz werden:

Code: Alles auswählen

	aFilterFields = DimArray(1)
		aFilterFields(0) = new com.sun.star.sheet.TableFilterField
		aFilterFields(0).Connection = com.sun.star.sheet.FilterConnection.AND
		aFilterFields(0).field=6
		aFilterFields(0).IsNumeric = true
		aFilterFields(0).NumericValue=7500
		aFilterFields(0).Operator = com.sun.star.sheet.FilterOperator.GREATER
		aFilterFields(1) = new com.sun.star.sheet.TableFilterField
		aFilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
		aFilterFields(1).field=6
		aFilterFields(1).IsNumeric = true
		aFilterFields(1).NumericValue=9000
		aFilterFields(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL

Gruß,
mikele

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten