Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Moderator: Moderatoren
Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Hallo,
ich möchte hier einmal mit Blick auf den Thread:
viewtopic.php?f=2&p=255346#p255346
die Frage in den Raum stellen ob jemand eine Möglichkeit sieht das Ergebnis von Textstrings (im Sinne des verlinkten Threads) allein in einem Script direkt zu berechnen? Möglicherweise anknüpfend an http://www.starbasicfaq.de/WiekannmanFu ... enden.html
Ich schreibe "Script" weil es mir egal ist ob in StarBasic, Python, ....
Was meine ich?
Es ist offensichtlich das man das Ergebnis jedes Strings (im Sinne des o. Genannten) berechnen kann indem man diesen String als Formel in eine geeignete Calc-Tabellenzelle per Code einfügt und das Ergebnis ausliest und das Einfügen danach wieder rückgängig macht. Aber geht das auch ohne diesen Trick?
Für Formeln die nur Operatoren (+-*/) enthalten ist das mit einigem Aufwand denkbar, aber wie steht es für beliebige Formeln?
Sieht jemand eine Chance?
Gruß
Stephan
ich möchte hier einmal mit Blick auf den Thread:
viewtopic.php?f=2&p=255346#p255346
die Frage in den Raum stellen ob jemand eine Möglichkeit sieht das Ergebnis von Textstrings (im Sinne des verlinkten Threads) allein in einem Script direkt zu berechnen? Möglicherweise anknüpfend an http://www.starbasicfaq.de/WiekannmanFu ... enden.html
Ich schreibe "Script" weil es mir egal ist ob in StarBasic, Python, ....
Was meine ich?
Es ist offensichtlich das man das Ergebnis jedes Strings (im Sinne des o. Genannten) berechnen kann indem man diesen String als Formel in eine geeignete Calc-Tabellenzelle per Code einfügt und das Ergebnis ausliest und das Einfügen danach wieder rückgängig macht. Aber geht das auch ohne diesen Trick?
Für Formeln die nur Operatoren (+-*/) enthalten ist das mit einigem Aufwand denkbar, aber wie steht es für beliebige Formeln?
Sieht jemand eine Chance?
Gruß
Stephan
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Hallo Stephan,
das wäre doch wie das Rad erneut erfinden!?
dieses Makro müsste doch die gesamte Rechenfunktionalität von Calc wiederspiegeln.
einschließlich tiefster Verknüpfungen auf andere Zellen oder Dateien.
Oder wie ist deine Anfrage zu verstehen?
das wäre doch wie das Rad erneut erfinden!?
dieses Makro müsste doch die gesamte Rechenfunktionalität von Calc wiederspiegeln.
einschließlich tiefster Verknüpfungen auf andere Zellen oder Dateien.
Oder wie ist deine Anfrage zu verstehen?
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Meine Anfrage versteht sich so das ja die komplette Rechenfunktionalität von Calc-Funktionen in Basic-Makros nutzbar ist [1], aber deshalb trotzdem keine allgemeine Lösuing für Calc-Formeln existiert, obwohl diese ja nur eine Kombination von Calc-Funktionen sind.Oder wie ist deine Anfrage zu verstehen?
Der Anlass zu fragen war der andere Thread (viewtopic.php?f=2&p=255346#p255346) denn ich glaubte zunächst es müsse einfach sein das in [1] erläuterte zu nutzen indem ich einfach die Calc-Funktion Summe mit dem String parametriere, denn in einer Tabellenzelle funktioniert:
=SUMME((((0,300+0,260+0,300)*1,740)*12,000))
(auch wenn es etwas 'überflüssig ist nur einen Summanden zu summieren)
Allein geht es nicht auf dem in [1] benannten Weg mit diesem Parameter, denn z.B. das Folgende klappt bei mir nicht:
Code: Alles auswählen
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Dim args( 0 ) As Variant
args(0) = (((0.300+0.260+0.300)*1.740)*12.000)
result = oFunctionAccess.callFunction( "SUM", args() )
In Erweiterung hoffe ich auch das wenn es dafür eine Lösung gibt, das diese mir einen Hinweis auf ein Problem liefert was seit Jahren in meiner Extension "mottco" (http://calc-info.de/makros.htm#mottco) nicht gelöst ist.
[1]
siehe meinen Link auf:
http://www.starbasicfaq.de/WiekannmanFu ... enden.html
Gruß
Stephan
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Hallo Stephan,
Du müsstest doch erfahren genug sein um eine vernünftige Fehlerbeschreibung geben zu können
.
Falls Du aber einfach nur sagen wolltest, das dein Code nix ausgibt (kein Ergebnis anzeigt), dann liegt das daran, das Du etwas vergessen hast. Es ist eine simple PRINT Anweisung.
Und das Makro funktioniert dann wie zu erwarten einwandfrei, das Ergebnis der Rechenoperation ist 17,9568.
Oder geht es um das Problem "Komma zu Punkt"? Weil in einer Calc-Zelle die Dezimalzahl mit Komma steht, aber das Makro mit Punkt rechnet und bei einer Formel mit mehreren Klammern das umwandeln nicht so einfach ist.
Oder wo liegt dein Problem "klappt bei mir nicht" denn nun genau?
Gruß
balu
Was klappt bei dir mit dem Code nicht?Allein geht es nicht auf dem in [1] benannten Weg mit diesem Parameter, denn z.B. das Folgende klappt bei mir nicht:
Du müsstest doch erfahren genug sein um eine vernünftige Fehlerbeschreibung geben zu können

Falls Du aber einfach nur sagen wolltest, das dein Code nix ausgibt (kein Ergebnis anzeigt), dann liegt das daran, das Du etwas vergessen hast. Es ist eine simple PRINT Anweisung.
Code: Alles auswählen
Sub Main
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Dim args( 0 ) As Variant
args(0) = (((0.300+0.260+0.300)*1.740)*12.000)
result = oFunctionAccess.callFunction( "SUM", args() )
print result
End Sub
Oder geht es um das Problem "Komma zu Punkt"? Weil in einer Calc-Zelle die Dezimalzahl mit Komma steht, aber das Makro mit Punkt rechnet und bei einer Formel mit mehreren Klammern das umwandeln nicht so einfach ist.
Oder wo liegt dein Problem "klappt bei mir nicht" denn nun genau?

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
ich bekam eine Fehlermeldung in der Zeile:Was klappt bei dir mit dem Code nicht?
Code: Alles auswählen
result = oFunctionAccess.callFunction( "SUM", args() )
Das tut es jetzt bei mir auch und ich bin ratlos warum es des vorher nicht tat.Und das Makro funktioniert dann wie zu erwarten einwandfrei
Nein. Ich hatte ja nicht ohne Grund das Ganze richtig hingeschrieben so das ersichtlich war das es den Punkt braucht.Oder geht es um das Problem "Komma zu Punkt"?
ja, wie gesagt es geht jetzt, warum es bisher nicht ging kann ich nicht mehr nachvollziehen.Oder wo liegt dein Problem "klappt bei mir nicht" denn nun genau?
Danke für Deine Aufmerksamkeit den Code gegenzuprüfen, denn sonst hätte ich weiterhin geglaubt das er nicht geht
(es gibt allgemein bei "com.sun.star.sheet.FunctionAccess" und einigen Funktionen (ich erinnere mich nicht Welche) Probleme, so das mir das Nichtfunktionieren des konkreten Codes nicht sooo unwahrscheinlich erschien)
Gruß
Stephan
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Hallo
@balu
Du hast eine Kleinigkeit übersehen, args(0) kommt als String, im BasicQuelltext wäre das dann:
@balu
Du hast eine Kleinigkeit übersehen, args(0) kommt als String, im BasicQuelltext wäre das dann:
Code: Alles auswählen
Sub Main
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Dim args( 0 ) As Variant
args(0) = "(((0.300+0.260+0.300)*1.740)*12.000)" 'beachte die " anführungszeichen'
result = oFunctionAccess.callFunction( "SUM", args() )
print result
End Sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Naja, wenn dann hatte ich das bereits übersehen.Du hast eine Kleinigkeit übersehen, args(0) kommt als String, im BasicQuelltext wäre das dann:
Deine genaue Formulierung mit "kommt" verstehe ich, aber ich hatte zu Testzwecken rumprobiert ohne das aus der Zelle zu lesen und bin mir sicher dabei beide Varianten (also (((0.300+0.260+0.300)*1.740)*12.000) und "(((0.300+0.260+0.300)*1.740)*12.000)") ohne Erfolg probiert zu haben. Ich kann somit nur sagen das es mir rätselhaft ist warum das Ganze bei mir nicht geklappt hat.
Gruß
Stephan
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
@Karolus
Egal ob in OOo 3.2.1, AOO 4.0.1 oder LO 4.2.1.1 bei deinem geänderten Code bekomme ich immer eine Fehlermeldung.Text (String) ist.
Willst Du mir wirklich weiß machen das LO 4.3 mit so einem String rechnen kann? Und das soll sich jetzt nicht beleidigend anhören. Da ich kein LO 4.3 habe kann ich also nichts dazu sagen. Das wäre jedoch eine imense Arbeitserleichterung wenn LO 4.3 mit so einem String rechnen könnte. Oder habe ich dich irgendwie falsch verstanden?
@Stephan
Und über diesen Stolperstein (fehlende bzw. falsche deklaration von oFunctionAccess) war ich früher auch so einigemale schmerzlich gestolpert.
[OffToppic]
Vor längerer Zeit hatte ich in einem sehr umfangreichen Makro auch mit dieser Methode gearbeitet. Das aber nur, um Calc-Funktionen in das Makro auszulagern. Funktionierte wohl, musste aber auch mehrfach mit dem eben erwähnten Stolperstein unliebsamen Kontakt machen bis das es einwandfrei lief. Und da mir aber diese Methode dann im Laufe der Zeit nicht mehr so wirklich gefiel, da ich unnötige Zugriffe auf das Tabellenblatt vermeiden wollte, hatte ich das ganze dann anders geregelt (was sich hier nicht anwenden lässt).
[/OffToppic]
. Ich war aber auch nicht wirklich aufmerksam genug, denn sonst hätte ich das mit der deklaration sofort bemerkt. Aber das habe ich jetzt hiermit nachgeholt.
Gruß
balu
Nicht dein ernst, oder!?Du hast eine Kleinigkeit übersehen, args(0) kommt als String, im BasicQuelltext wäre das dann:
Egal ob in OOo 3.2.1, AOO 4.0.1 oder LO 4.2.1.1 bei deinem geänderten Code bekomme ich immer eine Fehlermeldung.
Und warum? Na weil dasBASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type:com.sun.star..lang.IllegalArgumentException
Message:.
Code: Alles auswählen
args(0) = "(((0.300+0.260+0.300)*1.740)*12.000)" 'beachte die " anführungszeichen'
Willst Du mir wirklich weiß machen das LO 4.3 mit so einem String rechnen kann? Und das soll sich jetzt nicht beleidigend anhören. Da ich kein LO 4.3 habe kann ich also nichts dazu sagen. Das wäre jedoch eine imense Arbeitserleichterung wenn LO 4.3 mit so einem String rechnen könnte. Oder habe ich dich irgendwie falsch verstanden?
@Stephan
Ah ja, alles klar. Und die Fehlermeldung war wahrscheinlich die eben zitierte Exception, was aber nicht so wild ist (das nicht mehr genaue wissen der Fehlermeldung).ich bekam eine Fehlermeldung in der Zeile:
(an den Wortlaut erinnere ich mich nicht mehr)Code: Alles auswählen
result = oFunctionAccess.callFunction( "SUM", args() )
Ich hatte vorhin auch nicht so sehr genau darauf geachtet, aber höchstwahrscheinlich lag es daran das *oFunctionAccess* als Variable nicht deklariert war. Und demzufolge müsste dein Code nun leicht modifiziert so aussehen (ein wenig umstrukturiert).Das tut es jetzt bei mir auch und ich bin ratlos warum es des vorher nicht tat.Und das Makro funktioniert dann wie zu erwarten einwandfrei
Code: Alles auswählen
Sub Main
Dim oFunctionAccess as Object
Dim args( 0 ) As Variant
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
args(0) = (((0.300+0.260+0.300)*1.740)*12.000)
result = oFunctionAccess.callFunction( "SUM", args() )
print result
End Sub
[OffToppic]
Vor längerer Zeit hatte ich in einem sehr umfangreichen Makro auch mit dieser Methode gearbeitet. Das aber nur, um Calc-Funktionen in das Makro auszulagern. Funktionierte wohl, musste aber auch mehrfach mit dem eben erwähnten Stolperstein unliebsamen Kontakt machen bis das es einwandfrei lief. Und da mir aber diese Methode dann im Laufe der Zeit nicht mehr so wirklich gefiel, da ich unnötige Zugriffe auf das Tabellenblatt vermeiden wollte, hatte ich das ganze dann anders geregelt (was sich hier nicht anwenden lässt).
[/OffToppic]
Gern geschehnDanke für Deine Aufmerksamkeit den Code gegenzuprüfen, denn sonst hätte ich weiterhin geglaubt das er nicht geht

Ich weiß was Du meinst. Und zwar das einige Funktionen nicht in der "englischen" Schreibweise, sondern nur in der deutschen funktionieren. Müsste aber auch erst hier im Forum nachschauen welche das sind, ich glaube Wochentag ist so ein Kandidat.(es gibt allgemein bei "com.sun.star.sheet.FunctionAccess" und einigen Funktionen (ich erinnere mich nicht Welche) Probleme
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Ich hätte es ausführlicher schreiben sollen, natürlich kann LO-basic das nicht direkt als String auswerten,balu hat geschrieben:@KarolusNicht dein ernst, oder!?Du hast eine Kleinigkeit übersehen, args(0) kommt als String, im BasicQuelltext wäre das dann:
Egal ob in OOo 3.2.1, AOO 4.0.1 oder LO 4.2.1.1 bei deinem geänderten Code bekomme ich immer eine Fehlermeldung.Und warum? Na weil dasBASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type:com.sun.star..lang.IllegalArgumentException
Message:.Text (String) ist.Code: Alles auswählen
args(0) = "(((0.300+0.260+0.300)*1.740)*12.000)" 'beachte die " anführungszeichen'
Willst Du mir wirklich weiß machen das LO 4.3 mit so einem String rechnen kann? Und das soll sich jetzt nicht beleidigend anhören. Da ich kein LO 4.3 habe kann ich also nichts dazu sagen. Das wäre jedoch eine imense Arbeitserleichterung wenn LO 4.3 mit so einem String rechnen könnte. Oder habe ich dich irgendwie falsch verstanden?
natürlich kann Basic aber auch syntaktisch richtigen Quelltext auswerten, auch ohne einen oFunctionAccess.callFunction drumrum zu schachteln.
(Ich hatte in Stephans Post nur schlicht übersehen, das er keinen String sondern Quelltext benutzt.)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Hallo,
eine wirklich der Excel VBA Funktion Evaluate vergleichbare Funktion gibt es in OpenOffice oder LibreOffice bisher nicht.
Das beste, was ich bisher in der Hinsicht zustande gebracht habe, ist quasi ein temporäres com.sun.star.sheet.SpreadsheetDocument zu erzeugen und die Formeln dort zu evaluieren. Das erspart das "wieder rückgängig machen" aus "indem man diesen String als Formel in eine geeignete Calc-Tabellenzelle per Code einfügt und das Ergebnis ausliest und das Einfügen danach wieder rückgängig macht."
eine wirklich der Excel VBA Funktion Evaluate vergleichbare Funktion gibt es in OpenOffice oder LibreOffice bisher nicht.
Das beste, was ich bisher in der Hinsicht zustande gebracht habe, ist quasi ein temporäres com.sun.star.sheet.SpreadsheetDocument zu erzeugen und die Formeln dort zu evaluieren. Das erspart das "wieder rückgängig machen" aus "indem man diesen String als Formel in eine geeignete Calc-Tabellenzelle per Code einfügt und das Ergebnis ausliest und das Einfügen danach wieder rückgängig macht."
Code: Alles auswählen
Function Evaluate(s as String) as Variant
oDoc = CreateUnoService("com.sun.star.sheet.SpreadsheetDocument")
oSheet = oDoc.createInstance("com.sun.star.sheet.Spreadsheet")
oDoc.Sheets.insertByName("MySheet", oSheet)
oRange = oSheet.getCellRangeByName("A1")
oRange.Formula = s
Evaluate = oRange.Value
oRange = Nothing
oSheet = Nothing
oDoc = Nothing
End Function
Sub test
x = pi()/4
f = "=sin(" & x & ")"
y = Evaluate(f)
MsgBox y
x = 1000
f = "=PMT(4%; 10; " & x & ")"
y = Evaluate(f)
MsgBox y
End Sub
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Mahlzeit !
Ergibt 17,9568. Das nur so als Beispiel.
Aber da stehe zumindest ich vor einem Problem (wahrscheinlich stelle ich mich aber momentan einfach nur zu dumm an), denn im Tabellenblatt steht ja in einer Zelle (((0,300+0,260+0,300)*1,740)*12,000) also Dezimaltrenner Komma, anstatt wie im Makro so üblich Dezimaltrenner Punkt und ich weiß momentan nicht den richtigen Weg um einerseits den String so umzuwandeln das er kein String mehr ist und gleichzeitig dabei auch noch Komma durch Punkt zu ersetzen. Wobei Komma durch Punkt ginge ja sehr einfach mit replace.
Aber damit lässt sich ja nicht weiter rechnen, da es sich noch immer um einen String handelt.
Und das Vorhaben von Stephan ist ja; String einlesen und umwandeln in eine direkt ausführbare Rechenoperation, anschließend das Ergebnis in eine Tabellenblattzelle schreiben.
Nun, ich hatte mir folgendes gedacht.
Mittels replace die Zahlen der Stringformel zu wandeln, wie eben gezeigt.
Die Operatoren zählen, für den nächsten Schritt.
Die Zahlen in ein Array schreiben. Da dies Array ja von vornherein nicht fest steht, muss mittels der gezählten Operatoren plus 1 dies Array erstellt werden. Plus 1 deshalb, weil für eine simple Rechenoperation 2 Zahlen (Werte) und ein Operator benötigt wird. Also bei 5 Zahlen müssen 4 Operatoren vorhanden sein.
Als nächstes alle vorhandenen Zahlen {0.300 bis 12.000} durch einen Platzhalter ersetzen (#).
Jetzt eine "Rechenformel" neu aufbauen. Dazu den gewandelten String mit den Platzhaltern auslesen, und wenn kein Platzhalter gefunden wird das dementsprechende Zeichen aus dem String herausnehmen, und bei einem Platzhalter die dementsprechende Zahl aus dem Array nehmen. Das alles aneinander gereiht sollte dann die neue "Rechenformel" ergeben.
Das geht ja auch so weit alles. Nur das Dumme daran ist, ich habe wieder nur einen String mit dem es sich nicht rechnen lässt. Das hatte ich mir irgendwie anders vorgestellt. Ganze Arbeit umsonst
.
Mit den Zahlen im Array lässt es sich aber durchaus rechnen. Ich brauche dazu nur ein VAL voranstellen, und das würde dann Beispielsweise so aussehen.
Also die 4. mit der 5. Zahl aus dem Array aGewandelteZahlen multiplizieren.
Na ja, auch wenn ich nicht wirklich weiter gekommen bin als erhofft, so hänge ich den momentanigen Code (der ja auch nur ein Testcode ist) jetzt mal hier rein. Vielleicht lässt sich ja darauf irgendwie aufbauen, und wenn nicht, auch egal.
Gruß
balu
Okay, verstanden.Karolus hat geschrieben: Ich hätte es ausführlicher schreiben sollen, natürlich kann LO-basic das nicht direkt als String auswerten,
Das stimmt!Karolus hat geschrieben: natürlich kann Basic aber auch syntaktisch richtigen Quelltext auswerten, auch ohne einen oFunctionAccess.callFunction drumrum zu schachteln.
Code: Alles auswählen
print (((0.300+0.260+0.300)*1.740)*12.000)
Aber da stehe zumindest ich vor einem Problem (wahrscheinlich stelle ich mich aber momentan einfach nur zu dumm an), denn im Tabellenblatt steht ja in einer Zelle (((0,300+0,260+0,300)*1,740)*12,000) also Dezimaltrenner Komma, anstatt wie im Makro so üblich Dezimaltrenner Punkt und ich weiß momentan nicht den richtigen Weg um einerseits den String so umzuwandeln das er kein String mehr ist und gleichzeitig dabei auch noch Komma durch Punkt zu ersetzen. Wobei Komma durch Punkt ginge ja sehr einfach mit replace.
Code: Alles auswählen
Sub Main
sOld ="(((0,300+0,260+0,300)*1,740)*12,000)"
sGewandelt = replace(sOld, ",", ".")
print sGewandelt
End Sub
Und das Vorhaben von Stephan ist ja; String einlesen und umwandeln in eine direkt ausführbare Rechenoperation, anschließend das Ergebnis in eine Tabellenblattzelle schreiben.
Nun, ich hatte mir folgendes gedacht.
Mittels replace die Zahlen der Stringformel zu wandeln, wie eben gezeigt.
Die Operatoren zählen, für den nächsten Schritt.
Die Zahlen in ein Array schreiben. Da dies Array ja von vornherein nicht fest steht, muss mittels der gezählten Operatoren plus 1 dies Array erstellt werden. Plus 1 deshalb, weil für eine simple Rechenoperation 2 Zahlen (Werte) und ein Operator benötigt wird. Also bei 5 Zahlen müssen 4 Operatoren vorhanden sein.
Als nächstes alle vorhandenen Zahlen {0.300 bis 12.000} durch einen Platzhalter ersetzen (#).
Jetzt eine "Rechenformel" neu aufbauen. Dazu den gewandelten String mit den Platzhaltern auslesen, und wenn kein Platzhalter gefunden wird das dementsprechende Zeichen aus dem String herausnehmen, und bei einem Platzhalter die dementsprechende Zahl aus dem Array nehmen. Das alles aneinander gereiht sollte dann die neue "Rechenformel" ergeben.
Das geht ja auch so weit alles. Nur das Dumme daran ist, ich habe wieder nur einen String mit dem es sich nicht rechnen lässt. Das hatte ich mir irgendwie anders vorgestellt. Ganze Arbeit umsonst

Mit den Zahlen im Array lässt es sich aber durchaus rechnen. Ich brauche dazu nur ein VAL voranstellen, und das würde dann Beispielsweise so aussehen.
Code: Alles auswählen
print val(aGewandelteZahlen(4)) * val(aGewandelteZahlen(5))
Na ja, auch wenn ich nicht wirklich weiter gekommen bin als erhofft, so hänge ich den momentanigen Code (der ja auch nur ein Testcode ist) jetzt mal hier rein. Vielleicht lässt sich ja darauf irgendwie aufbauen, und wenn nicht, auch egal.
Code: Alles auswählen
Dim aOperatorenArray (3)
Dim sNeuerString as string
Dim iRechnen as Integer, iGefundeneOperatoren as Integer
Sub Main
aOperatorenArray(0) = "*" : aOperatorenArray(1) = "+" : aOperatorenArray(2) = "-" : aOperatorenArray(3) = "/"
sKlammer = "(((0,300+0,260+0,300)*1,740)*12,000)"
sNeuerString = replace(sKlammer, ",", ".")
iRechnen = len(sNeuerString)
ZaehlOperatoren '*************************************************sprung zur Sub ZaehlOperatoren
Dim aGewandelteZahlen (1 to iGefundeneOperatoren+1)
iVari = ""
iGZ = 0
sTempString = sNeuerString
for i = 1 to iRechnen
zCodeAuslesen = asc(mid(sNeuerString, i, 1))
sZeichen = mid(sNeuerString, i, 1)
if zCodeAuslesen >= 48 and zCodeAuslesen <= 57 or zCodeAuslesen = 46 then
iVari = iVari & sZeichen
else
if i = iRechnen then
iGZ = iGZ +1
aGewandelteZahlen(iGZ) = iVari
sTempErsetz = replace(sTempString, aGewandelteZahlen(iGZ), "#", 1, 1)
sTempString = sTempErsetz
REM print "temp = " & sTempString
iVari = ""
end if
end if
if sZeichen ="*" OR sZeichen ="+" OR sZeichen ="-" OR sZeichen ="/" then
iGZ = iGZ +1
aGewandelteZahlen(iGZ) = iVari
sTempErsetz = replace(sTempString, aGewandelteZahlen(iGZ), "#", 1, 1)
sTempString = sTempErsetz
REM print "temp = " & sTempString
iVari = ""
end if
next i
REM print "tempEnde = " & sTempString
REM print "Länge sTempString = " & len(sTempString)
REM print "Rechnen = " & val(aGewandelteZahlen(4)) * val(aGewandelteZahlen(5))
'------------------------------------------------------------------------------ab hier die neue "Rechenformel"
w = len(sTempString)
dim tmpKette as variant
iA = 1
for m = 1 to w
if mid(sTempString, m, 1)<> "#" then
tmpKette = tmpKette + mid(sTempString, m, 1)
else
if mid(sTempString, m, 1) = "#" then
tmpKette = tmpKette + aGewandelteZahlen(iA)
iA = iA +1
end if
end if
next m
print "tmpKette = " & tmpKette
End Sub
'
'***********************************************************************************************************
'
Sub ZaehlOperatoren
iGefundeneOperatoren = 0
for iZO = 1 to iRechnen
zCodeAuslesenZO = asc(mid(sNeuerString, iZO, 1))
sZeichenZO = mid(sNeuerString, iZO, 1)
for iO = 0 to 3
If sZeichenZO = aOperatorenArray(iO) then
iGefundeneOperatoren = iGefundeneOperatoren +1
end if
next Io
next iZO
REM print iGefundeneOperatoren
End sub
'
'***********************************************************************************************************
'
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Mahlzeit!
Das neuste vom Tage von mir lautet:
"ICH habe keinen Bock mehr! Ich schmeiß alles hin und geb auf!"
Der Grund dafür ist:
Ich bin ja wohl gegenüber anderen hier nur ne winzig kleine Leuchte, wenn es um Makros geht, aber das haut trotzdem alles nicht so hin wie ich es mir gewünscht hatte, das übersteigt mein Wissen und können. Und ich wäre mal sehr gespannt darauf zu sehen wie andere mit nem höheren Wissensstand das Problem lösen würden.
Der Primäre Wunsch von Stephan besteht ja darin, das mit diesem String
(((0,300+0,260+0,300)*1,740)*12,000)
der in einer Tabellenzelle steht, im Makro gerechnet werden soll um dann das Ergebnis in eine andere Zelle zu schreiben.
Nun, ich hatte ja schon in meinem letzten Beitrag geschrieben, das nach meinen Tests momentan immer ein String rauskommt, egal wie ich es auch versuchte es anders anzustellen. Also Versuche mit MID und REPLACE brachten einfach keinen Erfolg.
Jetzt hätte ich da eventuell eine andere Methode, die eigentlich auch viel Logischer wäre.
Anstatt wie zu Anfangs von mir gedacht den String so umzuwandeln das man mit ihm einfach per PRINT oder MSGBOX zu rechenen,
wäre es doch eigentlich theoretisch besser die einzelnen Klammern aufzulösen, sprich auszurechnen.
Mit anderern Worten, erst wird das erste Klammerpaar ausgerechnet.
Danach käme das zweite dran.
Und zu guter letzt das dritte Klammerpaar.
So würden wir ja als Mensch auch vorgehen, wenn wir das von Hand auf Papier erledigen würden.
Und mittels Computer per Makro könnte man ja auch so vorgehen. Dazu müssen ja erstmal die Stringzahlen extrahiert und umgewndelt werden. Das geht ja auch. Und mit diesen umgewandelten Zahlen lässt sich ja auch durchaus Rechnen, wie schon erwähnt.
Also haben wir jetzt ein Array mit den umgewandelten Zahlen. Und als nächstes müssen wir die Klammern auflösen. Dazu muss aber das Makro wissen wo das erste auszurechnende Klammerpaar anfängt und wo es aufhört. Und da wäre meine im vorherigen Beitrag gezeigte Methode alle Zahlen durch Rauten (#) zu ersetzen hilfreich. Denn nun kann man als erstes nach öffnende Klammer und Raute suchen (# und dann als nächstes nach Raute und schließende Klammer #). Und im Anschluss extrahiert man so das erste Klammerpaar in einen neuen String.
Jetzt kommt der Punkt warum ich das Handtuch werfe.
In dem gegebenen Beispiel ist eine sehr günstige konstellation im ersten Klammerpaar gegeben, und zwar werden 3 Werte miteinander addiert. Und da könnte man dann eine ganz einfache Formel anwenden um sie auszurechnen.
Das Ergebnis stimmt auch.
Und man könnte für andere Grundrechenarten diese Formel auch ganz einfach abändern. Dazu müsste nur das + gegen ein anderes Zeichen getauscht werden. Dadurch könnte man dann Unterprogramme für die 4 Grundrechenarten erstellen.
Aber problematischer wird das ganze dann, wenn die erste Klammer so aussehen würde.
(0,3-0,26+0,3)
Das ist eine erlaubte Rechenoperation die man ja so schreiben kann. Aber genau das ist der Grund warum ich das Handtuch werfe, denn wie soll man (ich) jetzt diesen Fall handhaben?
Klar, das gegebene Beispiel, welches sich auf den zu Anfang verlinkten Thread bezieht, sieht anders aus. Aber auch so etwas müsste dann dennoch berücksichtigt werden.
Also, ich mache nicht mehr weiter. Bin hier erstmal raus.
Gruß
balu
Das neuste vom Tage von mir lautet:
"ICH habe keinen Bock mehr! Ich schmeiß alles hin und geb auf!"
Der Grund dafür ist:
Ich bin ja wohl gegenüber anderen hier nur ne winzig kleine Leuchte, wenn es um Makros geht, aber das haut trotzdem alles nicht so hin wie ich es mir gewünscht hatte, das übersteigt mein Wissen und können. Und ich wäre mal sehr gespannt darauf zu sehen wie andere mit nem höheren Wissensstand das Problem lösen würden.
Der Primäre Wunsch von Stephan besteht ja darin, das mit diesem String
(((0,300+0,260+0,300)*1,740)*12,000)
der in einer Tabellenzelle steht, im Makro gerechnet werden soll um dann das Ergebnis in eine andere Zelle zu schreiben.
Nun, ich hatte ja schon in meinem letzten Beitrag geschrieben, das nach meinen Tests momentan immer ein String rauskommt, egal wie ich es auch versuchte es anders anzustellen. Also Versuche mit MID und REPLACE brachten einfach keinen Erfolg.
Jetzt hätte ich da eventuell eine andere Methode, die eigentlich auch viel Logischer wäre.
Anstatt wie zu Anfangs von mir gedacht den String so umzuwandeln das man mit ihm einfach per PRINT oder MSGBOX zu rechenen,
Code: Alles auswählen
PRINT (((0.300+0.260+0.300)*1.740)*12.000)
Mit anderern Worten, erst wird das erste Klammerpaar ausgerechnet.
Code: Alles auswählen
(0.300+0.260+0.300) ' = Ergebnis1
Code: Alles auswählen
(Ergebnis1*1.740) ' = Ergebnis2
Code: Alles auswählen
(Ergebnis2*12.000)
Und mittels Computer per Makro könnte man ja auch so vorgehen. Dazu müssen ja erstmal die Stringzahlen extrahiert und umgewndelt werden. Das geht ja auch. Und mit diesen umgewandelten Zahlen lässt sich ja auch durchaus Rechnen, wie schon erwähnt.
Also haben wir jetzt ein Array mit den umgewandelten Zahlen. Und als nächstes müssen wir die Klammern auflösen. Dazu muss aber das Makro wissen wo das erste auszurechnende Klammerpaar anfängt und wo es aufhört. Und da wäre meine im vorherigen Beitrag gezeigte Methode alle Zahlen durch Rauten (#) zu ersetzen hilfreich. Denn nun kann man als erstes nach öffnende Klammer und Raute suchen (# und dann als nächstes nach Raute und schließende Klammer #). Und im Anschluss extrahiert man so das erste Klammerpaar in einen neuen String.
Jetzt kommt der Punkt warum ich das Handtuch werfe.
In dem gegebenen Beispiel ist eine sehr günstige konstellation im ersten Klammerpaar gegeben, und zwar werden 3 Werte miteinander addiert. Und da könnte man dann eine ganz einfache Formel anwenden um sie auszurechnen.
Code: Alles auswählen
isum = 0
for ii = 1 to 3
isum = isum + aGewandelteZahlen(ii)
next ii
print "addi = " & isum
Und man könnte für andere Grundrechenarten diese Formel auch ganz einfach abändern. Dazu müsste nur das + gegen ein anderes Zeichen getauscht werden. Dadurch könnte man dann Unterprogramme für die 4 Grundrechenarten erstellen.
Aber problematischer wird das ganze dann, wenn die erste Klammer so aussehen würde.
(0,3-0,26+0,3)
Das ist eine erlaubte Rechenoperation die man ja so schreiben kann. Aber genau das ist der Grund warum ich das Handtuch werfe, denn wie soll man (ich) jetzt diesen Fall handhaben?
Klar, das gegebene Beispiel, welches sich auf den zu Anfang verlinkten Thread bezieht, sieht anders aus. Aber auch so etwas müsste dann dennoch berücksichtigt werden.
Also, ich mache nicht mehr weiter. Bin hier erstmal raus.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Nicht wirklich, denn für solche Strings, also diejenigen die nur Operatoren (+-*/) enthalten, hatte ich ja bereis geäußert das:Der Primäre Wunsch von Stephan besteht ja darin, das mit diesem String
(((0,300+0,260+0,300)*1,740)*12,000)
der in einer Tabellenzelle steht, im Makro gerechnet werden soll um dann das Ergebnis in eine andere Zelle zu schreiben.
"Für Formeln die nur Operatoren (+-*/) enthalten ist das mit einigem Aufwand denkbar, ..."
Es ging mir hingegen um:
"... aber wie steht es für beliebige Formeln?"
z.B. indem Du den ganzen String zerlegst und die Zahlenwerte in ein Array speichert und die Operatoren in ein zweites Array.denn wie soll man (ich) jetzt diesen Fall handhaben?
Verbal also:
-trenne vom Gesamtstring links i Zeichen ab
-prüfe ob der abgetrennte String rechts ein + oder - hat, wenn ja speichere den vorderen Teil des abgetrennten Strings im Zahlen-Array und die letzte Stelle des abgetrennten Strings im Operatoren-Array
-setze als neuen Gesamtstring den bisherigen Gesamtstring unter linksseitiger Abtrennung des Teilstrings den Du gerade getrennt nach Zahl und Operator in den Arrays gespeichert hast
-wiederhole die vorstehenden Schritte bis der gesamte ursprüngliche String bearbeitet ist, beachte das ganz zuletzt noch eine Zahl übrigbleibt die mit ins Zahlenarray gespeichert werden muss
Als Code z.B.:
Code: Alles auswählen
dim zahlen()
dim operatoren()
x = "0.3-0.26+0.3"
k = LEN(x)
For i = 2 To k
tmp = Left(x, i)
If Right(tmp, 1) = "-" OR Right(tmp, 1) = "+" Then
l = LEN(tmp)
ll = LEN(x)
akt = Left(tmp, l-1)
og = UBOUND(zahlen())
Redim Preserve zahlen(og+1)
zahlen(og+1) = akt
ro = Right(tmp, 1)
og = UBOUND(operatoren())
Redim Preserve operatoren(og+1)
operatoren(og+1) = ro
x = Right(x, ll-l)
k = LEN(x)
End If
Next i
og = UBOUND(zahlen())
Redim Preserve zahlen(og+1)
zahlen(og+1) = x
zahlen(0) = "0.3"
zahlen(1) = "0.26"
zahlen(2) = "0.3"
operatoren(0) = "-"
operatoren(1) = "+"
nun rechne das Ergebnis aus:
Code: Alles auswählen
ergebnis = VAL(zahlen(0))
For i = 1 To UBOUND(zahlen())
Select Case operatoren(i-1)
Case "+"
ergebnis = ergebnis + VAL(zahlen(i))
Case "-"
ergebnis = ergebnis - VAL(zahlen(i))
End Select
Next i
Msgbox ergebnis
Sehr wahrscheinlich lässt sich das Ganze nun noch etwas effizienter coden wenn man bei dem aufgezeigten Weg bleibt oder es gibt sogar noch einen anderen Weg, genau das ist hier eigentlich die Herausforderung, also einen möglichst effizienten Code finden.
Gruß
Stephan
Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
Moin Stephan,
Einerseits hattest du anfangs mehrfach auf einen anderen Thread verlinkt, wo es ausschließlich um eine Stringformel geht: Berechnung von Formeln in Stringform.
Und anderseits
Sorry, aber da verlier ich den Roten Faden. Denn ich sehe da zwei klare unterschiedliche Anforderungen, und eine unbekannte Anforderung.
1.
Stringformel = bekannt
2.
Calc-Funktionen = bekannt
3.
"beliebige Formeln" = unbekannt
Punkt 1 und 3, so sehe ich das zumindest, lassen sich wohl miteinander Kombinieren. Denn es gibt ja außer den 4 Grundrechenarten noch weitere, z.B. Potenzieren und Wurzel ziehen. Wäre das schon als "beliebige Formel" zu verstehen, wenn alle Mathematischen Rechenarten beliebig miteinander kombiniert werden?
Die verlinkte, und hier aufgeführte Stringformel, ist ja so gesehen auch schon eine beliebige Formel.
Oder meinst Du jetzt allen ernstes die Kombination von Punkt 2 und 3? Wo Calc-Funktionen mehrfach beliebig verschachtelt sind, also so etwas in der Art?
Und soll diese verschachtelte Calc-Formel ausm Tabellenblatt eingelesen werden um sie dann im Makro aufzulösen um dann das Ergebnis in das Tabellenblatt zu schreiben? Das kann und will ich mir nicht vorstellen, da dies absolut blödsinnig wäre.
Einzelne Calc-Funktionen generell im Makro ans laufen zu bringen, hatten wir ja wohl doch schon abgehakt. Oder gibt es da jetzt bei dir wieder Probleme?
Sei doch jetzt mal bitte so gut und gib uns ganz genaue Beispiele um was es dir genau geht, damit es kein Rätsel raten mehr gibt.
Und ferner, erklär mal so nebenbei was das hiermit zu tun hat:
Mir ist gestern abend etwas durch den Kopf gewandert, was ich irgendwann auch mal testen werde. Im Prinzip will ich auch mit mehreren Arrays arbeiten, was im Prinzip einer SVERWEIS gleich kommen würde. Soll heißen, in einer Spalte stehen die Operatoren und in der anderen die Namen zu den Subs wo die Rechenarten durchgeführt werden.
Und der ganz grobe theoretische Ablauf wäre dann ungefähr;
- Wenn Operator, dann nimm die Zahlen direkt davor und danach und springe in die dementsprechende *Operator Sub* und rechne das Ergebnis aus.
- Danach mit dem Ergebnis zurück und die nächsten Zeichen vergleichen usw.
Wann ich das testen werde, weiß ich noch nicht. Denn ich muss ersteinmal wieder Lust dazu haben dort weiter zu machen, weil ich mich momentan einfach zu sehr auf das gegebene Beispiel versteift habe. Das verfolgt mich momentan in meinen Träumen.
Gruß
balu
Bei allem Respekt, aber ganz ehrlich gesagt sorgst Du schon für Verwirrung. Zumnidest bei mir, wenn ich ganz ehrtlich bin.Stephan hat geschrieben:Nicht wirklich, denn für solche Strings, also diejenigen die nur Operatoren (+-*/) enthalten, hatte ich ja bereis geäußert das:Der Primäre Wunsch von Stephan besteht ja darin, das mit diesem String
(((0,300+0,260+0,300)*1,740)*12,000)
der in einer Tabellenzelle steht, im Makro gerechnet werden soll um dann das Ergebnis in eine andere Zelle zu schreiben.
"Für Formeln die nur Operatoren (+-*/) enthalten ist das mit einigem Aufwand denkbar, ..."
Es ging mir hingegen um:
"... aber wie steht es für beliebige Formeln?"
Einerseits hattest du anfangs mehrfach auf einen anderen Thread verlinkt, wo es ausschließlich um eine Stringformel geht: Berechnung von Formeln in Stringform.
Und anderseits
so wie "beliebige Formeln".Stephan hat geschrieben: die komplette Rechenfunktionalität von Calc-Funktionen in Basic-Makros ...
Sorry, aber da verlier ich den Roten Faden. Denn ich sehe da zwei klare unterschiedliche Anforderungen, und eine unbekannte Anforderung.
1.
Stringformel = bekannt
2.
Calc-Funktionen = bekannt
3.
"beliebige Formeln" = unbekannt
Punkt 1 und 3, so sehe ich das zumindest, lassen sich wohl miteinander Kombinieren. Denn es gibt ja außer den 4 Grundrechenarten noch weitere, z.B. Potenzieren und Wurzel ziehen. Wäre das schon als "beliebige Formel" zu verstehen, wenn alle Mathematischen Rechenarten beliebig miteinander kombiniert werden?
Die verlinkte, und hier aufgeführte Stringformel, ist ja so gesehen auch schon eine beliebige Formel.
Oder meinst Du jetzt allen ernstes die Kombination von Punkt 2 und 3? Wo Calc-Funktionen mehrfach beliebig verschachtelt sind, also so etwas in der Art?
Code: Alles auswählen
WENN(ISTFEHLER(SUCHEN("DATE:";AA1));WENN(ISTFEHLER(SUCHEN("SUMMARY:";AA1));"";RECHTS(AA1;LÄNGE(AA1)-8));DATUM(TEIL(AA1;LÄNGE(AA1)-7;4);TEIL(AA1;LÄNGE(AA1)-3;2);TEIL(AA1;LÄNGE(AA1)-1;2)-WENN(ISTFEHLER(SUCHEN("DTEND";AA1));0;1)))
Einzelne Calc-Funktionen generell im Makro ans laufen zu bringen, hatten wir ja wohl doch schon abgehakt. Oder gibt es da jetzt bei dir wieder Probleme?
Sei doch jetzt mal bitte so gut und gib uns ganz genaue Beispiele um was es dir genau geht, damit es kein Rätsel raten mehr gibt.
Und ferner, erklär mal so nebenbei was das hiermit zu tun hat:
In Erweiterung hoffe ich auch das wenn es dafür eine Lösung gibt, das diese mir einen Hinweis auf ein Problem liefert was seit Jahren in meiner Extension "mottco" (http://calc-info.de/makros.htm#mottco) nicht gelöst ist.
Danke für deinen DenkanstoßStephan hat geschrieben:z.B. indem Du den ganzen String zerlegst und die Zahlenwerte in ein Array speichert und die Operatoren in ein zweites Array.denn wie soll man (ich) jetzt diesen Fall handhaben?

Mir ist gestern abend etwas durch den Kopf gewandert, was ich irgendwann auch mal testen werde. Im Prinzip will ich auch mit mehreren Arrays arbeiten, was im Prinzip einer SVERWEIS gleich kommen würde. Soll heißen, in einer Spalte stehen die Operatoren und in der anderen die Namen zu den Subs wo die Rechenarten durchgeführt werden.
Und der ganz grobe theoretische Ablauf wäre dann ungefähr;
- Wenn Operator, dann nimm die Zahlen direkt davor und danach und springe in die dementsprechende *Operator Sub* und rechne das Ergebnis aus.
- Danach mit dem Ergebnis zurück und die nächsten Zeichen vergleichen usw.
Wann ich das testen werde, weiß ich noch nicht. Denn ich muss ersteinmal wieder Lust dazu haben dort weiter zu machen, weil ich mich momentan einfach zu sehr auf das gegebene Beispiel versteift habe. Das verfolgt mich momentan in meinen Träumen.

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Ergebnis beliebiger Calc-Tabellenformel in Script ausrechnen
ja, und ich hatte leider vergessen verständlich hinzuschreiben das dieser Thread nur Anlass war und nicht das konkrete Beispiel das im Thread behandelt wurde mir wichtig warEinerseits hattest du anfangs mehrfach auf einen anderen Thread verlinkt, wo es ausschließlich um eine Stringformel geht
Exakt, genau das meine ich.Oder meinst Du jetzt allen ernstes die Kombination von Punkt 2 und 3? Wo Calc-Funktionen mehrfach beliebig verschachtelt sind, also so etwas in der Art?
(natürlich meine ich auch Formeln nur mit Operatoren (+-*/, Potenz, Wurzel), nur sind diese in Praxis ja eigentlich nicht so häufig und vor allem wäre hierfür ja auch eine LÖsung möglich)
mir geht es um ein Problem welches in meiner Extension mottco (http://calc-info.de/makros.htm#mottco) schon immer existiert, nämlich das bei einer möglichen Überarbeitung von bedingten Formatierungen ich keinen Weg habe nur mittels Programmcode mögliche Formeln in der bedingten Formatierung anzupassen.
Beispiel:
-markiere A1 bis A10
-rufe Format-Bedingte Formatierung auf
-wende folgende Formatierung an:
Formel ist: D10>C10
Vorlage: meineVorlage
-bestätige mit OK
markiere nun nur Zelle A1 und rufe Format-Bedingte Formatierung auf und lies was dort steht:
Formel ist: D1>C1
Vorlage: meineVorlage
und das sich dort die Funktion automatisch angepasst hat (hier ja nur für ein seeehr einfaches Beispiel) ist per Basic-Code nicht direkt zu ermitteln.
Das normale Lesen der bedingten Formatierung von A1:
bedingtes_format = ThisComponent.currentController.ActiveSheet.GetCellByPosition(0,0).ConditionalFormatLocal
Msgbox bedingtes_format(0).Formula1
liefert nämlich die Anzeige:
D10>C10
Gruß
Stephan