BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice 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 OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Formel mit verschiedenen Werten wiederholen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Leviathan
Beiträge: 10
Registriert: Di 25. Dez 2018, 15:36

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von Leviathan » Sa 29. Dez 2018, 19:05

Hallo,

ja, das ist genau was ich meinte, Danke mikele! ;)

Ist denn das, was in "vor dem Auslösen" angegeben ist, der Trick an der Sache? Oder gehört noch mehr dazu?


Das mit dem Runden hast du recht, ich dachte mir irgendwann zwischen drin, das es wohl einen Unterschied machen muss.
Aber ich weiß auch nicht sicher wie die "Quelle" das handhabt. Das kann ich nur parktisch überprüfen, was nicht immer gleich geht.
Ausserdem brauche ich dazu natürlich erstmal ein paar Funktionen die eine Überprüfung möglich machen.
(Hierzu könnte ich mehr schreiben, aber es wird sonst so lang)

Vielleicht ist die Quelle für den Grundwert nicht richtig (dort wo evtl die Rundung eine Abweichung verursacht), das kann ich aber erst in Tagen/Wochen selbst prüfen. Bis dahin kann ich nur versuchen, ob sich die Zahlen bei Änderung der Rundungsmethode angleichen.


Was die "0-Werte" angeht - ich probiere gerade die negativen Zahlen (die darf ich nicht ausblenden, die müssen zu 0 werden, um die Summe nicht zu verfälschen) mit WENN-Befehlen zu bändigen. Das sollte gehen, habe aber noch nicht herausgefunden wie genau.
(Betrifft auch nur die Spalte mit "Kosten bauen bis Level X")


EDIT: Ich unterschätze mich selbst irgendwie (will ja niemand beschäftigen wenn ich selbst eine Lösung finde, aber kenne Calc auf dieser Ebene kaum) Habe eine Lösung gefunden (eher Zufall), kein WENN-Befehl, sondern MAX(0;Formel):

Code: Alles auswählen

=MAX(0;AUFRUNDEN((SUMME(2*POTENZ(1,5;(ZEILE(INDIREKT("A1:A"&B8))-1))))-(SUMME(2*POTENZ(1,5;(ZEILE(INDIREKT("A1:A"&B2))-1))))))

Ein Problem das nun wirklich eines ist, ist folgendes (da sind Rundungsfehler fast zu vernachlässigen):
(Ich beschreibe es nochmal genau, Beispiel)

Kosten gebaute Level 10 = 227
Kosten bauen bis Level 20 = 13.071

Kosten gebaute Level 1 = 2
Kosten bauen bis Level 2 = 3

aber (leider auch)

Kosten gebaute Level 0 = 0
Kosten bauen bis Level 1 = 0 (statt 2)

Struktur der Formel derzeit: =MAX(AUFRUNDEN(SUMME(FORMEL 4 - Formel 1)))
(siehe oben)

Grund ist, das ich beide Formel-Ergebnisse subtrahiere (also praktisch von Level 1 dann 0 abziehe). Das wird nichts.
Ist aber ein Problem immer dort, wo noch kein Gebäude gebaut ist (also z.B. Mine Level: 0).

Kostet ein Gebäude Level 1 schon mehrere 1.000 bis 10.000, habe ich ja ganz falsche Summen, da hilft nichtmal 2 Augen zudrücken.
Diese teuren Gebäude baut man ggf. auch nur 1 Level aus, das dann aber nicht berechnet wird.

Für den Nutzen ist die Vergleichbarkeit von tatsächlichen und theoretischen Ausbaustufen elementar.
Insbesondere der Vergleich von Ausbaustufen und Forschungsstufen.

Wenn ich etwas Zeit habe, kann ich mal versuchen ein Beispiel hochzuladen.


Findet sich hier keine Lösung, muss ich alle Möglichkeiten in mühsamer Kleinarbeit ausrechnen. :(
Aber ich vertraue auf die Gunst des Calc Gottes und dem Wissen seiner Anhänger. ;)

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von mikele » Sa 29. Dez 2018, 20:14

Hallo,
hast du dir die Formeln mal angesehen? Die Probleme mit negativen Zahlen oder Null glaubte ich angefangen zu haben. Die Berechnungsgrundlagen müssten geklärt werden, ansonsten bleibt es ein Stochern im Nebel.
Gruß,
mikele

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von mikele » Sa 29. Dez 2018, 20:24

Hallo,
Ist denn das, was in "vor dem Auslösen" angegeben ist, der Trick an der Sache?
???
Was ist wo "vor dem Auslösen"?
Gruß,
mikele

Leviathan
Beiträge: 10
Registriert: Di 25. Dez 2018, 15:36

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von Leviathan » So 30. Dez 2018, 00:19

Hallo,

Ich hab die Formeln zuerst gar nicht angesehen, weil mein OO irgendwelche Sicherheitsbedenken hatte. Dann habe ich das doch so eingestellt, das es alles geht, auch das Makro. Ich hatte dich auch so verstanden, das du nur das Drehfeld demonstrieren willst. Wie das funktioniert verstehe ich nicht.

Wie stellt das Drehfeld einen Bezug her?

An dieser Stelle auch zu deiner 2. Frage zunächst: Makro > Enwurfmodus > Kontextmenü > Kontrollfeld > Ereignisse > ganz oben:
Vor dem Auslösen................vnd.sun.star.script:Standard.Module1.werte?language=Basic&location=document.

Wie stellt die Schaltfläche sonst den Bezug zum Cursor her? Nur auf die gelben Zellen bezieht es sich nicht, ich kann überall Zahlen eingeben und dann verstellen. Aus dem Drehfeld das wir anfangs hatten, gab es eine Möglichkeit eine Zelle/n anzugeben, das fehlt hier.

Ich finde, der Eintrag aus "Ereignisse" sieht nicht danach aus, deshalb frage ich.


Zu den Formeln - das habe ich tatsächlich übersehen weil nicht erwartet. Allerdings sind diese Formeln für mich etwas "schwierig".
Die andern kann ich inzwischen nachvollziehen, diese hier sind/scheinen komplizierter. Hier wüsste ich nicht was ich verändern kann ohne sie kaputt zu machen.

Ich muss aber auch fragen, hast du sie ausprobiert? Weil bei mir funktionieren sie leider nicht.

Es geht zwar, das Level 0 und Level 1 nicht 0, sondern 2 ergeben, aber dafür geht was anderes nicht mehr: sind die Level gleich, ergibt sich nicht 0, sondern irgendein Level, eine Summe, oder was auch immer. Und ausserdem, Moment...

Das sieht so aus:

ist Level 0 = 0
bis Level 0 = 2 (? falsch)

ist Level 0 = 0
bis Level 1 = 2 (richtig)

ist Level 1 = 2
bis Level 1 = 5 (?? falsch)

ist Level 1 = 2
bis Level 2 = 3 (richtig)

ist Level 2 = 3
bis Level 2 = 8 (?? falsch)

usw; aber:

ist Level (höcher) = richtige Zahl
bis Level (niediger) = 0 (richtig)


Das funktioniert also nicht wirklich, zumindest nicht in meiner Datei.
Die anderen beiden Formeln habe ich jetzt nicht kontrolliert, (dafür haben wir ja auch funktionierende Formeln gefunden), aber auf den ersten Blick sind sie richtig.

Was meinst du mit Brechnungsgrundlagen genau?

Ich glaube es wäre gut wenn ich selbst ein Modell hochlade, wie ich mir das vorstelle.
Dazu brauche ich vllt. etwas Zeit, das geht evtl. erst morgen/heute/nachher. (offiziell schon morgen, für mich noch heute) :)

Grüße
Levi

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von mikele » So 30. Dez 2018, 00:54

Hallo,
zum Rechenfehler: Die Formel in C8 muss folgendermaßen lauten:

Code: Alles auswählen

=WENN(ODER(B2<0;B8<=B2);0;SUMMENPRODUKT(AUFRUNDEN(2*POTENZ(1,5;ZEILE(INDIREKT("A" & B2+1& ":A"& B8))-1))))
Den beiden Schaltflächen, die ich wie ein Drehfeld aussehen lasse, habe ich ein Makro zugeordnet.

Code: Alles auswählen

Sub werte (oevent)

	diff=val(right(oevent.source.model.label,2))
	oAkt=ThisComponent.currentselection
	if oAkt.supportsservice("com.sun.star.sheet.SheetCell") then
		if oAkt.Type=com.sun.star.table.CellContentType.VALUE then
			oAkt.value=oAkt.value+diff
		end if
	end if

End Sub
Anhand der Beschriftung der Schaltfläche erfasse ich, ob +1 oder -1 gerechnet werden soll. Danach wird geprüft, auf die aktuelle Auswahl nur aus einer einzelnen Zelle besteht und ob diese einen Zahlenwert (keine Formel oder String) enthält. Dann wird entsprechend gerechnet.
Die Berechnungsgrundlagen sind die von dir angesprochenen Unklarheiten zwecks Rundung etc.
Gruß,
mikele

Leviathan
Beiträge: 10
Registriert: Di 25. Dez 2018, 15:36

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von Leviathan » So 30. Dez 2018, 02:36

Nur kurz,

Die Formel funktioniert jetzt. =)

Code: Alles auswählen

(ODER(B2<0;B8<=B2)
Bei diesem Abschnitt hat offenbar das = gefehlt. Vielleicht ist es mir abhanden gekommen als ich mir das angesehen habe. Dazu noch ein Tipp - die Schaltflächen nicht neben die Zellen tun, dort verdecken sie so lange Formeln immer. (= erstmal "umbauen")

Ich könnte/müsste/sollte nun alle Formeln durch diese neuen ersetzen - ziemlich viel getippe, aber ich hätte auch gern ein einheitliches Formelmuster. Falls nochmal was daran geändert/ergänzt werden muss, wäre das sicher besser.

Darüber muss ich erstmal ne Runde schlafen. :| Bin schon ganz betreibsblind, morgen geht das sicher besser.

Vor allem würde ich die neuen Formeln gern ganz verstehen, warum sie nun all das tun was sie tun. Bei mir hat MAX(0;(...)) negative Zahlen verhindert, bei den neuen versteh ich erstmal nicht wo das passiert. Ich rechne auch damit, das ich sie irgendwann reproduzieren muss aber vllt nicht auf diese Einträge hier zurückgreifen kann (passiert ja alles mögliche). Dann muss ich wissen was ich gemacht habe.

Das Makro und sein "Programmiertext" ist mir so ganz neu, dazu habe ich später noch Fragen, sonst kann ich evtl nichts damit anfangen.
Bevor wir das Thema abschließen, will ich sicher gehen und die Formeln in den Prototyp übertragen und testen.

Dann kann ich auch eine Aussage zur Rundungsmethode machen. Ich bin mir (theoretisch) sicher, dass das Auf-/Runden vor dem Summieren kommt, das hätte ich sehr wahrscheinlich sowieso überarbeiten müssen.

Auch vielen Dank für die Geduld mit mir bisher, damit hätte ich nicht gerechnet. :)

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von mikele » So 30. Dez 2018, 17:11

Hallo,
nach gegenwärtigen Stand willst du per Formel 4 verschiedene Kosten berechnen:
1) Kosten das aktuellen Levels (Bedingung: Level >=1)
2) Kosten bis zum aktuellen Level, also von Level 1 bis (einschließlich) aktueller Level (Bedingung: aktueller Level>=1)
3) Kosten des nächsten Levels (Bedingung: aktueller Level >=0)
4) Kosten vom aktuellen Level (ohne diesen selbst) bis zum Level n (Bedingung: n>aktueller Level, aktueller Level >=0)
In meiner Beispieltabelle ist der aktuelle Level in B2, der Level n in B8.
zu 1)

Code: Alles auswählen

=WENN(B2<1;0;SUMMENPRODUKT(AUFRUNDEN(2*POTENZ(1,5;B2-1))))
Durch die Wenn()-Funktion wird die Bedingung abgefangen. Wenn in B2 ein Wert kleiner als 1 steht, dann ist das Ergebnis 0, ansonsten werden die Kosten berechnet. Da nun nur ein einzelner Wert berechnet werden muss, kann auf Summenprodukt() verzichtet werden. Hatte ich nur der Vergleichbarkeit mit den anderen Formeln gelassen.
Es ginge also auch:

Code: Alles auswählen

=WENN(B2<1;0;AUFRUNDEN(2*POTENZ(1,5;B2-1)))
oder auch:

Code: Alles auswählen

=(B2>0)*AUFRUNDEN(2*POTENZ(1,5;B2-1))
da (B2>0) entweder 0 oder 1 liefert.
zu 2)

Code: Alles auswählen

=WENN(B2<1;0;SUMMENPRODUKT(AUFRUNDEN(2*POTENZ(1,5;ZEILE(INDIREKT("A1:A"& B2))-1))))
Jetzt wird es knifflig. Angenommen in B2 steht der Wert 5
Es müssen nacheinander die Werte 2*1,5^0 ; 2*1,5^1 ; 2*1,5^2 ; 2*1,5^3 und 2*1,5^4 berechnet, aufgerundet und dann summiert werden.
Um die Zahlen 0, 1, 2, 3, 4 zu generieren nutzt man einen kleine Trick: Die Funktion Zeile() liefert die Zeilennummer. Zeile(A1) liefert mir also die 1. Zeile(A1:A5) liefert dementsprechend 1, 2, 3, 4 und 5. An der Stelle fangen Matrixfunktionen an: Gibst du in eine Zelle

Code: Alles auswählen

=Zeile(A1:A5)
ein und schließt normal mit Enter, so erhältst du "nur" den Wert 1! Schließt du die Eingabe allerdings mit Shift+Strg+Enter ab, so erhält du die Werte 1 bis 5 (in einzelnen Zellen = eine so genannte 5x1-Matrix).
Nun ist aber der Wert 5 ja nicht fest, sondern ist der Wert aus der Zelle B2. Schreibt man nun als Formel

Code: Alles auswählen

=Zeile("A1:A" & 5)
so erhält man eine Fehlermeldung. Das "A1:A" & 5 ergibt zwar "A1:A5", ist aber einfach nur ein Text, der von der Funktion Zeile() nicht verstanden wird! Hier springt die Funktion Indirekt() ein. Sie macht aus einem Text einen richtigen Bezug auf einen Bereich.

Code: Alles auswählen

ZEILE(INDIREKT("A1:A"& B2))
liefert nun die Zahlen von 1 bis zum wert von B2. Da es negative Zeilen und auch die Zeile 0 nicht gibt, versagt die Methode, wenn in B2 ein Wert kleiner als 1 steht und muss durch die Wenn()-Funktion abgefangen werden.
zu 3) ist wieder einfach (siehe Punkt1)
zu 4) Wenn Nr. 2 klar ist, ist es nun einfach. Es müssen nun die Zahlen von B2+1 bis B8 generiert werden. Man kann natürlich (wie du es getan hast) die Summe bis B8 bilden und dann die Summe bis B2 abziehen. Weniger Rechenaufwand ist es allerdings nur die Summe über die Werte von B2+1 bis B8 zu bilden. Dazu muss einfach nur der Bereich "A1:A"& B2 so konstruiert werden, dass er bei B2+1 los- und bis B8 geht. Also:

Code: Alles auswählen

"A" & B2+1& ":A"& B8
-fertig. Allerdings muss nun beachtet werden, dass B8 größer als B2 ist und B2 nicht negativ ist - daher die Wenn()-Funktion mit der Oder()-Bedingung: wenn B2<0 oder B8<=B2 dann soll das Ergebnis 0 sein.
Die Funktion Summenprodukt() übernimmt die Summation der Matrix. (In diesem Fall werden gar keine Produkte gebildet, da ja nur eine Matrix als Argument übergeben wird.)
edit: anbei die obigen Betrachtungen mal Schritt-für-Schritt formeltechnisch auseinandergenommen
Dateianhänge
level ändern details.ods
(12.92 KiB) 102-mal heruntergeladen
Gruß,
mikele

Leviathan
Beiträge: 10
Registriert: Di 25. Dez 2018, 15:36

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von Leviathan » Mo 31. Dez 2018, 11:53

Hallo,

ich werde noch antworten (ob alles geht und nichts fehlt), brauche etwas Zeit, vielleicht erst morgen. Dann kann ich vermutlich das Thema als gelöst eintragen.

Danke dir mikele, für die ausführliche Erklärung. =) Ich werde es noch ein paar mal durchlesen müssen, einige Abschnitte habe ich aber sofort verstanden ("A" & B2+1& ":A"& B8) z.B.

Das mit dem WENN <>= muss ich mich nochmal reindenken, und ausprobieren, das ging auf die Schnelle nicht. (Brauch erstmal Kaffee)
Die Erklärungen sind aber sehr gut.

Mit einem guten Lehrer versteht man auch die (wie man zuerst denkt) unmöglichsten Dinge. ;)

VG
Levi

Leviathan
Beiträge: 10
Registriert: Di 25. Dez 2018, 15:36

Re: Formel mit verschiedenen Werten wiederholen

Beitrag von Leviathan » Mi 2. Jan 2019, 02:27

Hallo,

@ mikele - ich bin frustriert, mir ist ein Irrtum unterlaufen. Viel Zeit aber wenig Ruhe, da ist mir was entfallen oder ich habe was verwechselt,
bei all dem "geformel". Ich bin nach all den Tagen schon gant betriebsblind, und für manches werde ich extra Threads machen.

Der erste Ansatz für die 4. Formel, Summe A von Summe B abzuziehen, war eigentlich richtig, wenn da nicht die Sache mit "Summe = 0" wäre.
Das ganze ist kompliziert (dazustellen), ich werde vllt bis zum Wochenende brauchen bis ich eine gute Erklärung anbieten kann. (kaum noch Zeit ab morgen)

Mein Irrtum bestand darin, das ich nur Stichproben gemacht habe, und daraus falsche Annahmen über die "Vollversion" der Tabelle getroffen habe.
Ich brauche selbstverständlich eine Formel, die auch Level abziehen kann, also negative Ergebnisse.

Ich will nicht noch einen Fehler machen, ich muss manches erstmal genauer ansehen, nicht das ich mich wieder irre.
Ich werde erstmal einige Dinge im Detail nachrechnen.

Da wir Zahlenreihen mit Multiplikator haben, kann der Eindruck manchmal täuschen, was falsch oder richtig ist.
Wenn es mir geeigneter erscheint, werde ich einen "Versuchsaufbau" hochladen, statt langer Erklärungen.

Ich schieb grade echt Krise. Total verkorkst das ganze... ich trau mir schon selber nicht mehr :?

Ich würde es dir nicht nachtragen, wenn du dich mit der Sache nicht nochmal befassen magst.

Grüße
Levi

Antworten